दिया गया:

trait SomeTypeNotSerializable
trait ValueProvider[T] extends java.io.Serializable {
  def get: T
}

क्या ValueProvider[SomeTypeNotSerializable] क्रमानुसार है? क्या किसी ऑब्जेक्ट को किसी फ़ंक्शन के साथ लपेटकर गैर-धारावाहिक समस्या को हल करने का कोई तरीका है?

2
user_1357 24 जुलाई 2019, 03:38

2 जवाब

सबसे बढ़िया उत्तर

यह नियमों के अनुसार Serializable है, लेकिन यदि आप उस T को एक गैर-क्षणिक फ़ील्ड के रूप में संग्रहीत करते हैं तो यह रनटाइम पर विफल हो जाएगा। यदि T क्षणिक है या किसी फ़ील्ड द्वारा समर्थित नहीं है (उदाहरण के लिए, get को प्रत्येक कॉल पर बनाया गया है), तो आपको ठीक होना चाहिए, हालांकि मैं अभी भी उत्सुक हूं कि आप एक को क्रमबद्ध क्यों करना चाहते हैं service वस्तु, जो सामान्य अभ्यास नहीं है।

2
chrylis -on strike- 24 जुलाई 2019, 05:10

मैं जो देख सकता हूं उससे ValueProvider[SomeTypeNotSerializable] इस मामले में क्रमबद्ध नहीं होगा।

इसे नीचे दिए गए नमूना कोड से जांचा जा सकता है, जो प्रिंट चलाते समय:

testString is Serializable
st2 is Serializable

मुख्य वर्ग:

import java.io.Serializable;

public class Main {

    public static void main(String[] args) {

        NonSerializableThing nst = new NonSerializableThing();

        SerializableThing<NonSerializableThing> st = new SerializableThing<>();
        st.set(nst);

        if(nst instanceof Serializable) { // always false
            System.out.println("nst is Serializable");
        }

        if(st.get() instanceof Serializable) {
            System.out.println("st is Serializable");
        }

        String testString = "testString";
        SerializableThing<String> st2 = new SerializableThing<>();
        st2.set(testString);

        if(testString instanceof Serializable) { // always true
            System.out.println("testString is Serializable");
        }

        if(st2.get() instanceof Serializable) {
            System.out.println("st2 is Serializable");
        }

    }
}

अन्य प्रकार:

public class NonSerializableThing {

    NonSerializableThing() {}
}

public class SerializableThing<T> implements java.io.Serializable {

    public T t;

    public SerializableThing() { }

    public void set(T t) {this.t = t;}
    public T get() {return t;}

}
0
AbsoluteSpace 24 जुलाई 2019, 05:13