Intellij에서 직렬 버전 UID를 생성하는 방법


126

Eclipse를 사용할 때 직렬 버전 UID를 생성하는 멋진 기능이있었습니다.

그러나 IntelliJ에서 무엇을해야합니까?

IntelliJ에서 동일한 직렬 버전 UID를 선택하거나 생성하는 방법은 무엇입니까?

그리고 이전 클래스를 수정할 때 어떻게해야합니까?

을 지정하지 않은 경우 id런타임에 생성됩니다.



@JFIB 클래스 상수 serialVersionUID는 지정되지 않은 경우 컴파일러에 의해 생성됩니다. 지정하면 변경된 클래스 버전에 대해 ID를 동일하게 유지하는 장점 (및 위험)이 있습니다. 이전 버전의 객체가있는 파일은 새 버전으로 읽히거나 (역 직렬화 됨) 그 반대의 경우도 마찬가지입니다.
Joop Eggen 2014

답변:


304

플러그인없이 :

강조 표시 만 활성화하면됩니다 : (Idea v.2016, 2017 및 2018, 이전 버전은 동일하거나 유사한 설정을 가질 수 있음)

File-> Settings-> Editor-> Inspections-> Java-> Serialization issues-> Serializable class without 'serialVersionUID'-set flag and click 'OK'. (Mac의 경우 설정은 IntelliJ IDEA-> 기본 설정 ...)

이제 클래스가를 구현하는 경우 Serializable강조 표시되고 클래스 이름에 대한 alt + Enter가 생성을 제안합니다 private static final long serialVersionUID.

UPD :이 설정을 찾는 더 빠른 방법-핫키 Ctrl+Shift+A(작업 찾기)를 사용할 수 있습니다 . 다음을 입력 Serializable class without 'serialVersionUID'하십시오.


2
@SalilJunior 정말 아닙니다. serialVersionUID를 생성하는 내장 기능은 검사 경고와 관련이 있습니다. 검사 경고를 활성화하지 않고 경우에 따라 serialVersionUID를 생성하고 싶지 않을 때 멈춰 있습니다.
Fabian Barney

이 솔루션은 나를 위해 작동하지 않습니다. Parcelable 구현 제거, parcelable 구현 교체, 테스트 만들기, 하위 클래스 만들기 및 패키지 전용으로 만들기와 같은 옵션 만 볼 수 있습니다. 내가 사용중인 클래스는 Parcelable과 Serializable을 동시에 구현합니다. 어떤 생각?
gonver

위의 설정에서 필요한 플래그가 설정되어 있는지 확인 했습니까? v16 및 ​​v17 아이디어 모두에서 테스트되었으며 잘 작동합니다. 또한 설정 창 (오른쪽)에서 클릭 한 후 이러한 검사에 대한 추가 설정을 확인하십시오.
Serhii Maksymchuk

나는 이것을 몰랐고 매우 도움이되었다.
Chaklader Asfak Arefe 2011

62

가장 쉬운 방법 : Alt+ Enteron

private static final long serialVersionUID = ;

IntelliJ는 =. 커서를 그 위에 놓고 alt+ Enter( Mac에서는 Option+) Enter를 누릅니다. "serialVersionUID Initializer 임의 변경"이라는 팝업이 표시됩니다. Enter 키를 누르면 해당 공간이 임의의 long으로 채워집니다.


감사하게 IntelliJ IDEA 커뮤니티 에디션 버전에서 나를 위해 2018년 3월 3일 일
Tarun

가능한 경우 개인 수정자를 사용하는 것이 Java 문서에서도 권장됩니다. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky

2
위의 답변에 대한 더 나은 답변입니다.
Akin Okegbile 19 년

32

GenerateSerialVersionUID 플러그인 설치


2
아래 @Serhii가 보여주는 것처럼 쉽게 할 수 있는데 플러그인을 설치하는 이유는 무엇입니까?
shaz

2
@shaz 그 검사가 비활성화되었을 때 선호하지만 일부 클래스의 경우 명시적인 serialVersionUID가 필요합니다. 하나에 대해서만 serialVersionUID가 필요하지만 각 클래스에 대해주의를 분산시키는 검사를 원하지 않습니다.
Timofey

1
플러그인이 부모 클래스도 직렬화 가능하고 serialVersionUID. 이렇게하면 자식 클래스를 업데이트하고 부모 클래스의 serialVersionUID를 변경하지 않고이 클래스에 대한 새 serialVersionUID를 생성해야하는 경우를 처리합니다 (부모 클래스가 변경되지 않은 경우).
kapad

이것이 질문에 답할 수 있지만 여기에 링크가 아닌 실제 정보를 제공하는 것이 좋습니다. 링크 전용 답변은 좋은 답변으로 간주되지 않으며 삭제 될 수 있습니다 .
elixenide

3
@EdCottrell 제공 할 다른 정보가 없습니다. 플러그인을 사용하거나 사용하지 마십시오.
Meo

2

IntelliJ IDEA 플러그인 / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

아주 멋지고 설치하기 쉽습니다. 플러그인 메뉴에서 설치하고, 디스크에서 설치를 선택하고, lib 폴더에서 압축을 푼 jar 파일을 선택할 수 있습니다. 다시 시작, 제어 + 기능을 수행하면 메뉴에서 직렬 UID를 생성하도록 팝업됩니다. 그것을 사랑하십시오. :-)


0

코드 편집기에서 UID를 만들려는 클래스를 열고 오른쪽 클릭-> 생성-> SerialVersionUID. 이 작업을 수행하려면 GenerateSerialVersionUID 플러그인을 설치해야 할 수 있습니다.


1
귀하의 답변이이 문제를 해결하기 위해 새로운 것을 어떻게 추가한다고 생각하십니까? 대답이 그렇지 않다면 그 대답은 쓸모가 없기 때문에 그냥 제거하십시오.
nazar_art

플러그인을 추가 한 후 실제로 UID를 생성하는 방법에 대해 혼란 스러울 수 있습니다. 그것이 추가 된 것입니다.
mykey

1
나는 그들이 그 플러그인의 man 페이지를 읽을 수 있다고 생각한다. 당신의 대답은 분명합니다.
nazar_art
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.