java - एक serialVersionUID क्या है और मुझे इसका उपयोग क्यों करना चाहिए?




serialization (14)

एक serialVersionUID क्या है और मुझे इसका उपयोग क्यों करना चाहिए?

SerialVersionUID प्रत्येक वर्ग के लिए एक अद्वितीय पहचानकर्ता है, JVM वर्ग के संस्करणों की तुलना करने के लिए इसका उपयोग करता है यह सुनिश्चित करता है कि सीरियलाइजेशन के दौरान उसी वर्ग का उपयोग Deserialization के दौरान लोड किया गया हो।

निर्दिष्ट करना अधिक नियंत्रण देता है, यद्यपि यदि आप निर्दिष्ट नहीं करते हैं तो JVM एक उत्पन्न करता है। जेनरेट किया गया मान अलग-अलग कंपाइलरों के बीच भिन्न हो सकता है। इसके अलावा, कभी-कभी आप पुराने धारावाहिक वस्तुओं [ backward incompatibility ] के deserialization को मना करने के लिए कुछ कारण चाहते हैं, और इस मामले में आपको केवल serialVersionUID को बदलना होगा।

Serializable लिए javadocs कहते हैं :

डिफ़ॉल्ट serialVersionUID गणना कक्षा विवरणों के प्रति अत्यधिक संवेदनशील है जो संकलक कार्यान्वयन के आधार पर भिन्न हो सकती है, और इस प्रकार deserialization के दौरान अप्रत्याशित अवैध क्लास अपवाद का परिणाम हो सकता है।

इसलिए, आपको serialVersionUID घोषित करना होगा क्योंकि यह हमें अधिक नियंत्रण प्रदान करता है

इस आलेख में विषय पर कुछ अच्छे अंक हैं।

जब कोई serialVersionUID गुम हो जाता है तो ग्रहण चेतावनी जारी serialVersionUID है।

Serializable वर्ग फू प्रकार के एक स्थिर अंतिम धारावाहिक VersionUID क्षेत्र घोषित नहीं करता है

serialVersionUID क्या है और यह महत्वपूर्ण क्यों है? कृपया एक उदाहरण दिखाएं जहां गायब serialVersionUID एक समस्या का कारण बन जाएगा।


आप इन serialVersionUID चेतावनियों को अनदेखा करने के लिए ग्रहण को बता सकते हैं:

विंडो> वरीयताएँ> जावा> कंपाइलर> त्रुटियां / चेतावनियां> संभावित प्रोग्रामिंग समस्याएं

यदि आपको पता नहीं था, तो इस अनुभाग में कई अन्य चेतावनियां सक्षम हो सकती हैं (या यहां तक ​​कि कुछ त्रुटियों के रूप में भी रिपोर्ट की गई हैं), कई बहुत उपयोगी हैं:

  • संभावित प्रोग्रामिंग समस्याएं: संभावित आकस्मिक बूलियन असाइनमेंट
  • संभावित प्रोग्रामिंग समस्याएं: शून्य सूचक पहुंच
  • अनावश्यक कोड: स्थानीय चर कभी नहीं पढ़ा जाता है
  • अनावश्यक कोड: अनावश्यक शून्य जांच
  • अनावश्यक कोड: अनावश्यक कास्ट या 'उदाहरण'

और बहुत सारे।


क्षेत्र serialVersionUID के महत्व को समझने के लिए, किसी को समझना चाहिए कि सीरियलाइजेशन / Deserialization कैसे काम करता है।

जब एक सीरियलज़ेबल क्लास ऑब्जेक्ट को क्रमबद्ध किया जाता है तो जावा रनटाइम इस धारावाहिक ऑब्जेक्ट के साथ एक सीरियल संस्करण संख्या (जिसे serialVersionUID कहा जाता है) को जोड़ता है। उस समय जब आप इस धारावाहिक वस्तु को deserialize जावा रनटाइम धारावाहिक ऑब्जेक्ट के serialVersionUID से कक्षा के serialVersionUID के साथ मेल खाता है। यदि दोनों बराबर हैं तो केवल यह deserialization की आगे की प्रक्रिया के साथ आगे बढ़ता है और अन्य अवैध क्लास अपवाद फेंकता है।

तो हम निष्कर्ष निकाला है कि सीरियलाइजेशन / डेसेरियलाइजेशन प्रक्रिया को सफल बनाने के लिए धारावाहिक वस्तु का serialVersionUID कक्षा के serialVersionUID के बराबर होना चाहिए। यदि प्रोग्रामर प्रोग्राम में स्पष्ट रूप से serialVersionUID मान निर्दिष्ट करता है तो उसी मान को क्रमबद्ध ऑब्जेक्ट और क्लास से जोड़ा जाएगा, चाहे सीरियलाइजेशन और deserialzation प्लेटफ़ॉर्म के बावजूद (उदाहरण के लिए सूर्य का उपयोग करके खिड़कियों जैसे मंच पर किया जा सकता है। एमएस जेवीएम और Deserialization ज़िंग JVM का उपयोग कर विभिन्न मंच लिनक्स पर हो सकता है)।

लेकिन अगर serialVersionUID प्रोग्रामर द्वारा निर्दिष्ट नहीं किया गया है तो किसी भी ऑब्जेक्ट के सीरियलाइजेशन \ DeSerialization करते समय, जावा रनटाइम इसकी गणना करने के लिए अपने स्वयं के एल्गोरिदम का उपयोग करता है। यह serialVersionUID गणना एल्गोरिदम एक जेआरई से दूसरे में भिन्न होता है। यह भी संभव है कि जिस वस्तु को ऑब्जेक्ट किया गया है, वह एक जेआरई (पूर्व: सूर्य जेवीएम) और पर्यावरण जहां deserialzation होता है, लिनक्स जेवीएम (ज़िंग) का उपयोग कर रहा है। ऐसे मामलों में धारावाहिक वस्तु से जुड़े serialVersionUID deserialzation पर्यावरण पर गणना की कक्षा के serialVersionUID से अलग होगा। बदले में deserialization सफल नहीं होगा। इसलिए ऐसी स्थितियों / मुद्दों से बचने के लिए प्रोग्रामर को हमेशा सेरिअलाइज़ेबल क्लास के serialVersionUID निर्दिष्ट करना होगा।


परेशान न करें, 99, 99 99% मामलों के लिए डिफ़ॉल्ट गणना वास्तव में अच्छी और पर्याप्त है। और यदि आप समस्याओं में भाग लेते हैं, तो आप कर सकते हैं - जैसा कि पहले से ही कहा गया है - यूआईडी को आवश्यकता तीर के रूप में पेश करें (जो बेहद असंभव है)


मूल प्रश्न ने 'यह महत्वपूर्ण क्यों है' और 'उदाहरण' के लिए कहा है जहां यह Serial Version ID उपयोगी होगी। खैर मुझे एक मिला है।

मान लें कि आप एक Car वर्ग बनाते हैं, इसे तुरंत चालू करते हैं, और इसे ऑब्जेक्ट स्ट्रीम में लिखते हैं। फ़्लैटेड कार ऑब्जेक्ट कुछ समय के लिए फाइल सिस्टम में बैठता है। इस बीच, यदि एक नया क्षेत्र जोड़कर Car वर्ग संशोधित किया गया है। बाद में, जब आप फ़्लैटेड Car ऑब्जेक्ट को पढ़ने (यानी deserialize) पढ़ने की कोशिश करते हैं, तो आपको java.io.InvalidClassException मिलता है - क्योंकि सभी धारावाहिक वर्ग स्वचालित रूप से एक अद्वितीय पहचानकर्ता दिए जाते हैं। यह अपवाद फेंक दिया जाता है जब कक्षा का पहचानकर्ता फ़्लैटेड ऑब्जेक्ट के पहचानकर्ता के बराबर नहीं होता है। यदि आप वास्तव में इसके बारे में सोचते हैं, तो नए क्षेत्र के अतिरिक्त होने के कारण अपवाद फेंक दिया जाता है। एक स्पष्ट serialVersionUID घोषित करके आप स्वयं को संस्करण को नियंत्रित करके इस अपवाद को फेंक सकते हैं। स्पष्ट रूप से अपने serialVersionUID घोषित करने में एक छोटा प्रदर्शन लाभ भी है (क्योंकि गणना की आवश्यकता नहीं है)। इसलिए, जैसे ही आप उन्हें नीचे दिखाए गए अनुसार अपने Serializable कक्षाओं में अपना स्वयं का serialVersionUID जोड़ना सबसे अच्छा अभ्यास है:

public class Car {
static final long serialVersionUID = 1L; //assign a long value
}

मैं आम तौर पर एक संदर्भ में serialVersionUID का उपयोग करता serialVersionUID : जब मुझे पता है कि यह जावा वीएम का संदर्भ छोड़ देगा।

मुझे यह पता चल जाएगा कि जब मैं अपने आवेदन के लिए ObjectInputStream और ObjectOutputStream का उपयोग ObjectInputStream हूं या यदि मुझे पता है कि लाइब्रेरी / फ्रेमवर्क का उपयोग मैं इसका उपयोग करूंगा। SerialVersionID अलग-अलग संस्करणों के विभिन्न जावा वीएम सुनिश्चित करता है या विक्रेता सही ढंग से इंटर-ऑपरेट करेंगे या यदि इसे वीएम के बाहर संग्रहीत और पुनर्प्राप्त किया जाता है उदाहरण के लिए सत्र डेटा पुन: प्रारंभ करने और एप्लिकेशन सर्वर के अपग्रेड के दौरान भी रह सकता है।

अन्य सभी मामलों के लिए, मैं उपयोग करता हूं

@SuppressWarnings("serial")

चूंकि अधिकांश समय डिफ़ॉल्ट serialVersionUID पर्याप्त है। इसमें Exception , HttpServlet


यदि आप केवल क्रमबद्ध कर रहे हैं क्योंकि आपको कार्यान्वयन के लिए क्रमबद्ध करना है (उदाहरण के लिए यदि आप एक HTTPSession के लिए क्रमबद्ध करते हैं तो इसकी परवाह है ... यदि यह संग्रहीत है या नहीं, तो संभवतः आप किसी फॉर्म ऑब्जेक्ट को डी-सीरियलाइज़ करने की परवाह नहीं करते हैं) , तो आप इसे अनदेखा कर सकते हैं।

यदि आप वास्तव में क्रमबद्धता का उपयोग कर रहे हैं, तो यह केवल तभी महत्वपूर्ण है जब आप सीरियलाइजेशन का उपयोग करके वस्तुओं को संग्रहित और पुनर्प्राप्त करने की योजना बनाते हैं। SerialVersionUID आपके वर्ग संस्करण का प्रतिनिधित्व करता है, और यदि आप अपनी कक्षा का वर्तमान संस्करण अपने पिछले संस्करण के साथ पिछड़ा संगत नहीं है तो आपको इसे बढ़ाना चाहिए।

अधिकांश समय, आप शायद सीरियलाइजेशन का सीधे उपयोग नहीं करेंगे। यदि ऐसा है, तो त्वरित फ़िक्स विकल्प पर क्लिक करके एक डिफ़ॉल्ट धारावाहिक यूआईडी उत्पन्न करें और इसके बारे में चिंता न करें।


यदि आपको अपनी ऑब्जेक्ट को बाइट सरणी में क्रमबद्ध करने और उन्हें भेजने / स्टोर करने की आवश्यकता नहीं होगी, तो आपको इसके बारे में चिंता करने की आवश्यकता नहीं है। यदि आप करते हैं, तो आपको अपने serialVersionUID पर विचार करना चाहिए क्योंकि ऑब्जेक्ट का deserializer इसे अपने क्लासलोडर के ऑब्जेक्ट के संस्करण से मेल करेगा। जावा भाषा विशिष्टता में इसके बारे में और पढ़ें।


सबसे पहले मुझे क्रमबद्धरण की व्याख्या करने की आवश्यकता है।
सीरियलाइजेशन ऑब्जेक्ट को नेटवर्क पर उस ऑब्जेक्ट को भेजने के लिए ऑब्जेक्ट को स्ट्रीम करने या फ़ाइल में सहेजने या अक्षर उपयोग के लिए डीबी में सहेजने की अनुमति देता है।

Serialization के लिए कुछ नियम हैं

  • एक वस्तु केवल serializable है अगर इसकी कक्षा या इसके superclass serializable इंटरफ़ेस लागू करता है

  • एक ऑब्जेक्ट serializable है (स्वयं serializable इंटरफ़ेस लागू करता है) भले ही इसका सुपरक्लास नहीं है। हालांकि, serializable वर्ग के पदानुक्रम में पहला सुपरक्लास, जो Serializable इंटरफेस लागू नहीं करता है, एक नो-Arg कन्स्ट्रक्टर होना चाहिए। यदि इसका उल्लंघन किया जाता है, तो readObject () रनटाइम में java.io.InvalidClassException उत्पन्न करेगा

  • सभी आदिम प्रकार serializable हैं।

  • क्षणिक फ़ील्ड (क्षणिक संशोधक के साथ) क्रमबद्ध नहीं हैं, (यानी, सहेजा या बहाल नहीं किया गया)। एक वर्ग जो Serializable लागू करता है उन वर्गों के क्षणिक फ़ील्ड को चिह्नित करना चाहिए जो serialization (उदाहरण के लिए, एक फ़ाइल स्ट्रीम) का समर्थन नहीं करते हैं।

  • स्टेटिक फ़ील्ड (स्थिर संशोधक के साथ) क्रमबद्ध नहीं हैं।

जब ऑब्जेक्ट को क्रमबद्ध किया जाता है तो जावा रनटाइम सीरियल संस्करण संख्या को संबद्ध करता है जिसे धारावाहिक VersionID कहा जाता है।

जहां हमें serialVersionID की आवश्यकता है: यह सत्यापित करने के लिए deserialization के दौरान प्रेषक और रिसीवर serialization के संबंध में संगत हैं। अगर रिसीवर अलग serialVersionID के साथ वर्ग लोड किया तो deserialization अवैध क्लासकास्टएक्सप्शन के साथ खत्म हो जाएगा।
एक धारावाहिक वर्ग "serialVersionUID" नामक फ़ील्ड घोषित करके स्पष्ट रूप से स्थिर, अंतिम और प्रकार का होना चाहिए:।

आइए इसे एक उदाहरण के साथ आज़माएं।

import java.io.Serializable;    
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private String empname;
private byte empage;

public String getEmpName() {
    return name;
}
public void setEmpName(String empname) {
    this.empname = empname;
}
public byte getEmpAge() {
    return empage;
}
public void setEmpAge(byte empage) {
    this.empage = empage;
}

public String whoIsThis() {
    StringBuffer employee = new StringBuffer();
    employee.append(getEmpName()).append(" is ).append(getEmpAge()).append("
years old  "));
    return employee.toString();
}
}

Serialize ऑब्जेक्ट बनाएँ

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class Writer {
public static void main(String[] args) throws IOException {
    Employee employee = new Employee();
    employee.setEmpName("Jagdish");
    employee.setEmpAge((byte) 30);

    FileOutputStream fout = new 
FileOutputStream("/users/Jagdish.vala/employee.obj");
    ObjectOutputStream oos = new ObjectOutputStream(fout);
    oos.writeObject(employee);
    oos.close();
    System.out.println("Process complete");
}
}

वस्तु Deserializ

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Reader {
public static void main(String[] args) throws ClassNotFoundException, 
IOException {
    Employee employee = new Employee();
    FileInputStream fin = new 
    FileInputStream("/users/Jagdish.vala/employee.obj");
    ObjectInputStream ois = new ObjectInputStream(fin);
    employee = (Employee) ois.readObject();
    ois.close();
    System.out.println(employee.whoIsThis());
 }
}    

नोट: अब कर्मचारी वर्ग के serialVersionUID को बदलें और सहेजें:

private static final long serialVersionUID = **4L**;

और रीडर वर्ग निष्पादित करें। लेखक वर्ग को निष्पादित नहीं करना है और आपको अपवाद मिलेगा।

Exception in thread "main" java.io.InvalidClassException: 
com.jagdish.vala.java.serialVersion.Employee; local class incompatible: 
stream classdesc serialVersionUID = 1, local class serialVersionUID = 4
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1623)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at com.krishantha.sample.java.serialVersion.Reader.main(Reader.java:14)

java.io.Serializable लिए दस्तावेज़ संभवतः एक स्पष्टीकरण के बारे में हैं जो आपको मिलेगा:

क्रमबद्ध रनटाइम प्रत्येक धारावाहिक वर्ग के साथ एक संस्करण संख्या के साथ संबद्ध होता है, जिसे एक serialVersionUID कहा जाता है, जिसे deserialization के दौरान प्रयोग किया जाता है ताकि यह सत्यापित किया जा सके कि एक धारावाहिक वस्तु के प्रेषक और रिसीवर ने उस ऑब्जेक्ट के लिए कक्षाएं लोड की हैं जो क्रमबद्धता के संबंध में संगत हैं। यदि रिसीवर ने ऑब्जेक्ट के लिए एक वर्ग लोड किया है जिसमें संबंधित प्रेषक वर्ग की तुलना में एक अलग serialVersionUID है, तो deserialization के परिणामस्वरूप एक serialVersionUID होगा। एक धारावाहिक वर्ग धारावाहिक serialVersionUID नामक एक फ़ील्ड घोषित करके स्पष्ट रूप से अपने स्वयं के serialVersionUID घोषित कर सकता है जो स्थैतिक, अंतिम और प्रकार का होना चाहिए:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

यदि एक धारावाहिक वर्ग स्पष्ट रूप से एक serialVersionUID घोषित नहीं करता है, तो serialization रनटाइम जावा (टीएम) ऑब्जेक्ट सीरियलाइजेशन विशिष्टता में वर्णित अनुसार, कक्षा के विभिन्न पहलुओं के आधार पर उस कक्षा के लिए एक डिफ़ॉल्ट serialVersionUID मान की गणना करेगा। हालांकि, यह दृढ़ता से अनुशंसा की जाती है कि सभी धारावाहिक वर्ग स्पष्ट रूप से serialVersionUID मानों की घोषणा serialVersionUID हैं, क्योंकि डिफ़ॉल्ट serialVersionUID गणना कक्षा विवरणों के प्रति अत्यधिक संवेदनशील होती है जो संकलक कार्यान्वयन के आधार पर भिन्न हो सकती हैं, और इस प्रकार deserialization के दौरान अप्रत्याशित अवैध क्लास serialVersionUID परिणाम हो सकता है। इसलिए, विभिन्न जावा कंपाइलर कार्यान्वयन में एक सतत serialVersionUID मान की गारंटी के लिए, एक धारावाहिक वर्ग को एक स्पष्ट serialVersionUID मान घोषित करना होगा। यह भी दृढ़ता से सलाह दी जाती है कि स्पष्ट serialVersionUID घोषणाएं जहां संभव हो, निजी संशोधक का उपयोग करें, क्योंकि ऐसी घोषणाएं केवल तुरंत घोषित कक्षा serialVersionUID फ़ील्ड पर लागू होती हैं जो विरासत वाले सदस्यों के रूप में उपयोगी नहीं होती हैं।


जावा में कक्षा के SerialVersionUIDअंदर क्यों उपयोग करें Serializable?

के दौरान serialization, जावा रनटाइम कक्षा के लिए संस्करण संख्या बनाता है, ताकि वह इसे बाद में डी-क्रमबद्ध कर सके। यह संस्करण संख्या SerialVersionUIDजावा में जाना जाता है।

SerialVersionUIDसंस्करण धारावाहिक डेटा के लिए प्रयोग किया जाता है। यदि आप SerialVersionUIDधारावाहिक उदाहरण के साथ मेल खाते हैं तो आप केवल कक्षा को डी-क्रमबद्ध कर सकते हैं । जब हम SerialVersionUIDअपनी कक्षा में घोषित नहीं करते हैं , तो जावा रनटाइम इसे हमारे लिए उत्पन्न करता है लेकिन इसकी अनुशंसा नहीं की जाती है। डिफ़ॉल्ट तंत्र से बचने के लिए चर के SerialVersionUIDरूप में घोषित करने की अनुशंसा की जाती है private static final long

जब आप Serializableमार्कर इंटरफेस को कार्यान्वित करके कक्षा घोषित करते हैं java.io.Serializable, तो जावा रनटाइम डिफ़ॉल्ट सीरियलाइजेशन तंत्र का उपयोग कर डिस्क में उस वर्ग का उदाहरण जारी रखता है, बशर्ते आपने Externalizableइंटरफ़ेस का उपयोग करके प्रक्रिया को कस्टमाइज़ नहीं किया हो ।

जावा में Serializable कक्षा के अंदर SerialVersionUID का उपयोग क्यों करें देखें

कोड: javassist.SerialVersionUID


SerialVersionUID ऑब्जेक्ट के संस्करण नियंत्रण के लिए उपयोग किया जाता है। आप अपनी कक्षा फ़ाइल में serialVersionUID भी निर्दिष्ट कर सकते हैं। SerialVersionUID को निर्दिष्ट नहीं करने का नतीजा यह है कि जब आप कक्षा में किसी भी क्षेत्र को जोड़ते या संशोधित करते हैं तो पहले से ही धारावाहिक वर्ग पुनर्प्राप्त नहीं हो पाएगा क्योंकि नई कक्षा के लिए उत्पन्न सीरियलवर्सनयूआईडी और पुराने धारावाहिक वस्तु के लिए अलग-अलग होगा। जावा धारावाहिक प्रक्रिया serialized ऑब्जेक्ट की स्थिति को पुनर्प्राप्त करने के लिए सही serialVersionUID पर निर्भर करती है और serialVersionUID मेलसमूह के मामले में java.io.InvalidClassException फेंकता है

और पढ़ें: http://javarevisited.blogspot.com/2011/04/top-10-java-serialization-interview.html#ixzz3VQxnpOPZ


यदि आप बड़ी कक्षाओं में संशोधन करना चाहते हैं, जिसमें पुराने वर्गों के साथ संगतता बनाए रखने के दौरान पहले स्थान पर कोई धारावाहिक VersionUID सेट नहीं किया गया था, तो इंटेलिजे आइडिया जैसे टूल, ग्रहण यादृच्छिक संख्या उत्पन्न करते हैं और फाइलों के समूह पर काम नहीं करते हैं एक बार में। मैं निम्नलिखित बैश स्क्रिप्ट (मुझे विंडोज उपयोगकर्ताओं के लिए खेद है, मैक खरीदने या लिनक्स में कनवर्ट करने पर विचार करें) आसानी से serialVersionUID समस्या में संशोधन करने के लिए आते हैं:

base_dir=$(pwd)                                                                  
src_dir=$base_dir/src/main/java                                                  
ic_api_cp=$base_dir/target/classes                                               

while read f                                                                     
do                                                                               
    clazz=${f//\//.}                                                             
    clazz=${clazz/%.java/}                                                       
    seruidstr=$(serialver -classpath $ic_api_cp $clazz | cut -d ':' -f 2 | sed -e 's/^\s\+//')
    perl -ni.bak -e "print $_; printf qq{%s\n}, q{    private $seruidstr} if /public class/" $src_dir/$f
done

आप इस स्क्रिप्ट को सहेजते हैं, add_serialVersionUID.sh आपको ~ / bin पर कहते हैं। फिर आप इसे अपने मेवेन या ग्रैडल प्रोजेक्ट की मूल निर्देशिका में चलाते हैं जैसे:

add_serialVersionUID.sh < myJavaToAmend.lst

इस .lst में निम्न प्रारूप में serialVersionUID जोड़ने के लिए जावा फ़ाइलों की सूची शामिल है:

com/abc/ic/api/model/domain/item/BizOrderTransDO.java
com/abc/ic/api/model/domain/item/CardPassFeature.java
com/abc/ic/api/model/domain/item/CategoryFeature.java
com/abc/ic/api/model/domain/item/GoodsFeature.java
com/abc/ic/api/model/domain/item/ItemFeature.java
com/abc/ic/api/model/domain/item/ItemPicUrls.java
com/abc/ic/api/model/domain/item/ItemSkuDO.java
com/abc/ic/api/model/domain/serve/ServeCategoryFeature.java
com/abc/ic/api/model/domain/serve/ServeFeature.java
com/abc/ic/api/model/param/depot/DepotItemDTO.java
com/abc/ic/api/model/param/depot/DepotItemQueryDTO.java
com/abc/ic/api/model/param/depot/InDepotDTO.java
com/abc/ic/api/model/param/depot/OutDepotDTO.java

यह स्क्रिप्ट हुड के तहत जेडीके धारावाहिक उपकरण का उपयोग करती है। तो सुनिश्चित करें कि आपका $ JAVA_HOME / bin पाथ में है।


यह अच्छा होगा अगर चेकस्टाइल सत्यापित कर सके कि SerialVersionUID एक वर्ग पर जो Serializable लागू करता है, का एक अच्छा मूल्य है, यानी यह धारावाहिक संस्करण आईडी जनरेटर का उत्पादन करेगा। यदि आपके पास बहुत सी धारावाहिक डीटीओ के साथ एक परियोजना है, उदाहरण के लिए, मौजूदा धारावाहिक VERSIONUID को हटाने और इसे पुनर्जीवित करना याद रखना एक दर्द है, और वर्तमान में यह सत्यापित करने का एकमात्र तरीका (जिसे मैं जानता हूं) प्रत्येक वर्ग के लिए पुन: उत्पन्न करना और तुलना करना है पुराना वाला। यह बहुत दर्दनाक है।





serialversionuid