Como gerar esse valor no IntelliJ IDEA?
Eu vou para Configurações -> Erros -> Problemas de serialização -> Classe serializável sem 'serialVersionUID', mas ainda não me mostra o aviso. Minha classe pai PKladrBuilding implementa a interface Serializable .
Parte do código:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
java
serialization
intellij-idea
Kirill Bazarov
fonte
fonte
1L
como seu ID e incremente quando o formulário serializado for alterado. (Consulte stackoverflow.com/questions/888335/… ).Respostas:
Não tenho certeza se você tem uma versão antiga do IntelliJ IDEA, mas se eu for para o menu Arquivo → Configurações ... → Inspeções → Problemas de serialização → Classe serializável sem 'serialVersionUID' habilitado, a classe que você fornecer me fornecerá avisos.
Se eu tentar a primeira aula, vejo:
BTW: Ele não me mostrou um aviso até que eu adicionei
{ }
ao final de cada classe para corrigir o erro de compilação.fonte
File
|Invalidate Caches
, se isso não ajudar, entre em contato com [email protected] com um projeto de amostra para reproduzir.idea.log
(Ajuda | Revelar o login ...) para obter exceções. O diretório inicial criptografado no Linux é conhecido por causar problemas devido ao bug do kernel .Instale o plug-in GenerateSerialVersionUID de Olivier Descout.
Vá para: menu Arquivo → Configurações → Plugins → Procurar repositórios →
GenerateSerialVersionUID
Instale o plug-in e reinicie.
Agora você pode gerar o ID no menu Código → Gerar → serialVersionUID` ou no atalho.
fonte
Sem plugins: você só precisa ativar o destaque no IntelliJ:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'
- defina o sinalizador e clique'OK'
.Agora, se sua classe implementar
Serializable
, você verá o destaque e oalt+Enter
nome da classe proporá gerarprivate static final long serialVersionUID
.PS: Retirado daqui
fonte
Depois de passar algum tempo em serialização, acho que não devemos gerar
serialVersionUID
com algum valor aleatório, devemos dar um valor significativo.Aqui está um comentário detalhado sobre isso. Estou lidando com o comentário aqui.
Espero que isto ajude. Boa sorte.
fonte
serialVersionUID
com um novo número aleatório quando não quiser oferecer suporte a versões antigas na desserialização. Talvez eu não precise usar números aleatórios, mas possa começar com 1 e aumentá-lo. No entanto,3L
não tem mais significado para mim então-3518231192373568183L
. Portanto, acho que ambas as soluções funcionam da mesma forma. O número aleatório pode ter a vantagem de trabalhar em histórias não lineares com garfos e ramificações.Para gerar o valor use
e forneça à variável de modelo randomLong o seguinte valor: groovyScript ("new Random (). nextLong (). abs ()")
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
fonte
Além disso, você pode adicionar um modelo ao vivo que fará o trabalho.
Para isso, pressione Ctrl+Alt+S->
"Live Templates"
seção ->other
(ou w / e você deseja)E, em seguida, crie um novo com uma definição como esta:
Em seguida, selecione o
definition
escopo e salve-o como'serial'
Agora você pode digitar o
serial
TABcorpo da classe.fonte
Outra maneira de gerar o serialVersionUID é usar
>Analyze >Run Inspection by Name
no menu de contexto (ou o atalho do teclado, que é ctrl+ alt+ shift+ ipor padrão) e digite "Classe serializável sem 'serialVersionUID'" (ou simplesmente digite "serialVersionUID" e o tipo à frente) A função encontrará para você.Você receberá um menu de contexto onde poderá escolher onde executar as inspeções (por exemplo, tudo de um módulo específico, projeto inteiro, um arquivo, ...)
Com essa abordagem, você nem precisa definir as regras gerais de inspeção para nada.
fonte
Com versão
v2018.2.1
Vamos para
Um aviso deve aparecer próximo à declaração da classe.
fonte
Estou usando o Android Studio 2.1 e tenho uma consistência melhor de obter a lâmpada clicando no nome da classe e passando o mouse por um segundo.
fonte
Adicione um modelo ativo chamado "ser" ao outro grupo, defina-o como "Aplicável em Java: declaração" e desmarque a opção "Encurtar nomes de FQ". Dê a ele um texto de modelo apenas:
Agora edite variáveis e configure serial para:
Ele assume o layout padrão do projeto Gradle. Altere / construa / para / target / para Maven.
fonte
Método moderno mais fácil:
Alt
+Enter
onO IntelliJ sublinha o espaço após o
=
. coloque o cursor sobre ele e pressionealt
+Enter
(Option
+Enter
no Mac). Você receberá uma popover que diz "Alterar aleatoriamente o inicializador serialVersionUID". Basta pressionar enter e ele preencherá esse espaço com um comprimento aleatório.fonte
Se você deseja adicionar o serialVersionUID ausente para vários arquivos, o IntelliJ IDEA pode não funcionar muito bem. Crio um script simples para cumprir esse objetivo com facilidade:
Você salva esse script, digamos como
add_serialVersionUID.sh
em sua~/bin
pasta. Em seguida, você o executa no diretório raiz do seu projeto Maven ou Gradle, como:Este .lst inclui a lista de arquivos Java para adicionar o serialVersionUID no seguinte formato:
Este script usa a ferramenta serialVer JDK. É ideal para uma situação em que você deseja alterar um grande número de classes que não tinham serialVersionUID definido em primeiro lugar, mantendo a compatibilidade com as classes antigas.
fonte