วิธีสร้าง UID เวอร์ชันอนุกรมใน Intellij


129

เมื่อฉันใช้Eclipseมันมีคุณสมบัติที่ดีในการสร้าง UID เวอร์ชันอนุกรม

แต่จะทำอย่างไรใน IntelliJ?

จะเลือกหรือสร้าง UID เวอร์ชันอนุกรมที่เหมือนกันใน IntelliJ ได้อย่างไร

และจะทำอย่างไรเมื่อคุณปรับเปลี่ยนคลาสเก่า?

หากคุณไม่ได้ระบุidจะถูกสร้างขึ้นที่รันไทม์ ...



@JFIB ค่าคงที่คลาสserialVersionUIDถูกสร้างโดยคอมไพลเลอร์เมื่อไม่ได้ระบุ การระบุมีข้อดี (และอันตราย) ในการทำให้ id เหมือนกันสำหรับคลาสเวอร์ชันที่เปลี่ยนแปลง นั่นคือไฟล์ที่มีอ็อบเจ็กต์ของเวอร์ชันเก่าจะถูกอ่าน (deserialized) กับเวอร์ชันใหม่หรือในทางกลับกัน
Joop Eggen

คำตอบ:


307

ไม่มีปลั๊กอินใด ๆ :

คุณเพียงแค่ต้องเปิดใช้งานไฮไลต์: (Idea v.2016, 2017 และ 2018 เวอร์ชันก่อนหน้าอาจมีการตั้งค่าเหมือนกันหรือคล้ายกัน)

ไฟล์ -> การตั้งค่า -> ตัวแก้ไข -> การตรวจสอบ -> Java -> ปัญหาการทำให้เป็นอนุกรม -> คลาสที่เรียงลำดับได้โดยไม่มี 'serialVersionUID' - ตั้งค่าสถานะและคลิก 'ตกลง' (สำหรับ 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 Implementation, แทนที่การใช้งานแบบพัสดุ, สร้างการทดสอบ, สร้างคลาสย่อยและทำให้แพ็กเกจเป็นส่วนตัว คลาสที่ฉันใช้ใช้ Parcelable และ Serializable ในเวลาเดียวกัน ความคิดใด ๆ ?
gonver

คุณตรวจสอบว่าจำเป็นตั้งค่าสถานะในการตั้งค่าด้านบนหรือไม่ ผ่านการทดสอบทั้งในแนวคิด v16 และ v17 ใช้งานได้ดี ตรวจสอบการตั้งค่าเพิ่มเติมสำหรับการตรวจสอบดังกล่าวหลังจากคลิกในหน้าต่างการตั้งค่า (ทางด้านขวา)
Serhii Maksymchuk

ฉันไม่รู้เรื่องนี้และพบว่ามีประโยชน์มาก
Chaklader Asfak Arefe

63

วิธีที่ง่ายที่สุด: Alt+ Enterเปิด

private static final long serialVersionUID = ;

IntelliJ จะขีดเส้นใต้ช่องว่างหลัง=. วางเคอร์เซอร์ไว้บนนั้นแล้วกดalt+ Enter( Option+ Enterบน Mac) คุณจะได้ป๊อปโอเวอร์ที่ระบุว่า "Randomly Change serialVersionUID Initializer" เพียงแค่กด Enter และจะเติมพื้นที่นั้นด้วยการสุ่มแบบยาว


ขอบคุณที่ทำงานให้ฉันใน IntelliJ IDEA Community Edition เวอร์ชัน 2018.3.3
Tarun

นอกจากนี้ยังแนะนำใน java docs ให้ใช้ตัวปรับแต่งส่วนตัวหากเป็นไปได้ docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky

2
ตอบข้อหนึ่งดีกว่า
Akin Okegbile

32

ติดตั้งปลั๊กอินGenerateSerialVersionUID


2
ทำไมต้องติดตั้งปลั๊กอินในเมื่อสามารถทำได้อย่างง่ายดายดังที่แสดงโดย @Serhii ด้านล่าง
shaz

2
@shaz ฉันชอบเมื่อปิดการใช้งานการตรวจสอบ แต่สำหรับบางคลาสที่ต้องใช้ serialVersionUID อย่างชัดเจน ฉันไม่ต้องการการตรวจสอบที่รบกวนสมาธิในแต่ละคลาสในขณะที่ฉันต้องการ serialVersionUID เพียงอันเดียว
Timofey

1
ฉันคิดว่าปลั๊กอินช่วยในการสร้างค่าสำหรับคลาสย่อยโดยที่คลาสพาเรนต์สามารถต่ออนุกรมได้และมีไฟล์serialVersionUID. สิ่งนี้จะดูแลกรณีที่คุณอัปเดตคลาสลูกและจำเป็นต้องสร้าง serialVersionUID ใหม่สำหรับคลาสนี้โดยไม่ต้องเปลี่ยน serialVersionUID ของคลาสพาเรนต์ (ในกรณีที่ไม่มีการเปลี่ยนแปลงคลาสพาเรนต์)
kapad

แม้ว่าสิ่งนี้อาจตอบคำถามได้ แต่จะเป็นการดีกว่าที่จะให้ข้อมูลจริงที่นี่ไม่ใช่แค่ลิงก์ คำตอบการเชื่อมโยงอย่างเดียวไม่ถือว่าเป็นคำตอบที่ดีและอาจจะถูกลบ
elixenide

3
@EdCottrell ไม่มีข้อมูลอื่นที่จะให้ ใช้ปลั๊กอินหรือไม่ก็ได้
โอ

2

IntelliJ IDEA ปลั๊กอิน / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

สวยมากติดตั้งง่ายมาก คุณสามารถติดตั้งได้จากเมนูปลั๊กอินเลือกติดตั้งจากดิสก์เลือกไฟล์ jar ที่คุณคลายแพ็กในโฟลเดอร์ lib รีสตาร์ทควบคุม + อินและจะปรากฏขึ้นเพื่อสร้าง UID แบบอนุกรมจากเมนู รักมัน. :-)


0

ในโปรแกรมแก้ไขโค้ดเปิดคลาสที่คุณต้องการสร้าง UID สำหรับคลิกขวา -> สร้าง -> SerialVersionUID คุณอาจต้องติดตั้งปลั๊กอิน GenerateSerialVersionUID เพื่อให้ใช้งานได้


1
คุณคิดว่าคำตอบของคุณเพิ่มสิ่งใหม่ ๆ ในการแก้ปัญหานี้ได้อย่างไร ถ้าคำตอบไม่ใช่เพียงแค่กำจัดคำตอบของคุณเพราะมันไม่มีประโยชน์
nazar_art

หลังจากเพิ่มปลั๊กอินแล้วบางคนอาจสับสนเกี่ยวกับวิธีสร้าง UID จริง นั่นคือสิ่งที่เพิ่มเข้ามา
mykey

1
ฉันเดาว่าพวกเขาสามารถอ่าน man page สำหรับปลั๊กอินนั้นได้ คำตอบของคุณชัดเจน
nazar_art
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.