Como gerar UID da versão serial no Intellij

126

Quando usei o Eclipse, ele tinha um bom recurso para gerar o UID da versão serial.

Mas o que fazer no IntelliJ?

Como escolher ou gerar UID de versão serial idêntica no IntelliJ?

E o que fazer quando você modifica a classe antiga?

Se você não especificou o id, ele é gerado em tempo de execução ...

nazar_art
fonte
1
Duplicado de stackoverflow.com/questions/12912287/…
Bruno Volpato
@JFIB A constante de classe serialVersionUIDé gerada pelo compilador quando não especificada. A especificação tem a vantagem (e o perigo) de manter o id idêntico para as versões de classe alteradas. Ou seja, um arquivo com um objeto da versão antiga será lido (desserializado) com a nova versão ou vice-versa.
Joop Eggen

Respostas:

304

Sem quaisquer plug-ins:

Você só precisa habilitar o destaque: (Idea v.2016, 2017 e 2018, versões anteriores podem ter configurações iguais ou semelhantes)

Arquivo -> Configurações -> Editor -> Inspeções -> Java -> Problemas de serialização -> Classe serializável sem 'serialVersionUID' - defina o sinalizador e clique em 'OK'. (Para Macs, as configurações estão em IntelliJ IDEA -> Preferências ...)

Agora, se sua classe implementa Serializable, você verá o destaque e alt + Enter no nome da classe proporá gerar private static final long serialVersionUID.

UPD: uma maneira mais rápida de encontrar essa configuração - você pode usar o atalho Ctrl+Shift+A(localizar ação), digite Serializable class without 'serialVersionUID'- o primeiro é o único.

Serhii Maksymchuk
fonte
2
@SalilJunior Na verdade, não. A capacidade integrada de gerar um serialVersionUID está ligada a avisos de inspeção. Você fica paralisado quando não deseja habilitar o aviso de inspeção, mas gera serialVersionUID em alguns casos.
Fabian Barney
Esta solução não funciona para mim, só posso ver as opções: remover a implementação parcelable, substituir a implementação parcelable, criar teste, criar subclasse e tornar o pacote privado. A classe que estou usando implementa Parcelable e Serializable ao mesmo tempo. Qualquer ideia?
início de
Você verificou se o sinalizador necessário está definido nas configurações acima? Testado na ideia v16 e v17, funciona bem. Verifique também as configurações adicionais para tal inspeção após clicar na janela de configurações (à direita).
Serhii Maksymchuk
Eu não sabia disso e acho muito útil.
Chaklader Asfak Arefe
61

Método mais fácil: Alt+ Enteron

private static final long serialVersionUID = ;

O IntelliJ irá sublinhar o espaço após o =. coloque o cursor sobre ele e pressione alt+ Enter( Option+ Enterno Mac). Você obterá um popover que diz "Randomly Change serialVersionUID Initializer". Basta clicar em Enter e preencherá aquele espaço com um longo aleatório.

jeremysprofile
fonte
Obrigado trabalhou para mim no IntelliJ IDEA Community Edition versão 2018.3.3
Tarun
Também é aconselhável em documentos java usar o modificador privado sempre que possível. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky de
2
Melhor resposta para a pergunta acima.
Akin Okegbile
32

Instalar o plugin GenerateSerialVersionUID

Meo
fonte
2
Por que instalar um plugin quando isso pode ser feito facilmente como mostrado por @Serhii abaixo.
shaz
2
@shaz Eu prefiro quando essa inspeção está desabilitada, mas para algumas classes é necessário obter serialVersionUID explícito. Eu não quero uma inspeção perturbadora em cada classe, enquanto preciso de serialVersionUID apenas para uma.
Timofey
1
Acho que o plugin ajuda a gerar valores para subclasses onde a classe pai também é serializável e contém um serialVersionUID. Isso resolve o caso quando você atualizou a classe-filha e precisa gerar um novo serialVersionUID para esta classe sem alterar o serialVersionUID da classe-pai (nos casos em que nenhuma alteração foi feita na classe-pai).
kapad de
Embora isso possa responder à pergunta, é melhor fornecer as informações reais aqui e não apenas um link. Respostas apenas com link não são consideradas boas respostas e provavelmente serão excluídas .
elixenida de
3
@EdCottrell Não há outras informações a serem fornecidas. Use o plugin ou não.
Meo
2

Plug-ins IntelliJ IDEA / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

muito bom, muito fácil de instalar. você pode instalar a partir do menu de plug-ins, selecionar instalar do disco, selecionar o arquivo jar que você descompactou na pasta lib. reinicie, control + ins e aparecerá para gerar UID serial a partir do menu. adoro. :-)

Patch Rhythm
fonte
0

com no editor de código, abra a classe para a qual deseja criar o UID, clique com o botão direito -> Gerar -> SerialVersionUID. Pode ser necessário ter o plug-in GenerateSerialVersionUID instalado para que isso funcione.

a minha chave
fonte
1
como você acha que sua resposta adiciona algo novo para resolver esse problema? Se a resposta não for, apenas elimine sua resposta, pois ela é inútil.
nazar_art
depois de adicionar o plug-in, alguns podem ficar confusos sobre como realmente gerar o UID. Isso é o que é adicionado.
mykey
1
Acho que eles podem ler a página de manual desse plugin. Sua resposta é óbvia.
nazar_art