2013-10-20 13 views
1

說明的陣列列表:可以實現任何類的java.io.Serializable被添加到通用型<序列化>

我有一個ArrayList其需要哪個實現Serializable任何類。我甚至可以將實現Serializable的類的實例添加到此數組列表中,而不會出現任何編譯錯誤。 Java Generics如何處理將這些可序列化的對象添加到此列表中?

我知道的一個事實,即我們不能定義參考List<Object> l

但是我沒有看到我的List<Serializable> serializables參考任何編譯問題。

我在這裏的第二個問題是如何檢索這些對象中添加到此可序列化列表中的元素?

如果已經發布類似問題的答案,請發佈您的鏈接。

/***Here is my main class***/ 

import java.io.Serializable; 
import java.util.*; 

public class LearnArrayList { 
    public static void main(String[] args) { 

     List<Serializable> serializables = new ArrayList<Serializable>(); 
     serializables.add(new RandomClass1()); 
     serializables.add(new RandomClass2()); 

    } 
} 

/***Here is my RandomClass1 that I will add it to List<Serializable>***/ 

import java.io.Serializable; 

public class RandomClass1 implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private int a; 
    private int b; 

/*Getters and setters here*/ 
} 

/***Here is my RandomClass2 that I will add it to List<Serializable>***/ 
import java.io.Serializable; 

public class RandomClass2 implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private String s; 

/*Getters and setters here*/ 
} 
+1

是的,你爲什麼不試試呢?這會比輸入問題快100倍。 – Bohemian

+0

*「我知道我們無法定義參考清單的事實」*解釋這一點。另外,我不明白你的第二個問題。 –

+0

我會在這裏回答這個問題。「我知道我們無法定義參考列表 l」。編譯器不會阻止我們定義對象列表。我們可以使用.get(index)來檢索這些對象。但是從我的列表中檢索對象後,查看我的類中的元素的正確方法是什麼。 – sanBV

回答

0

請參考下面的代碼片段。我希望這是自我解釋。

public static void main(String[] args) { 
    List<Serializable> serializables = new ArrayList<Serializable>(); 
    serializables.add(new RandomClass1()); 
    serializables.add(new RandomClass2()); 
    process(serializables); 
    process2(serializables);//no issues 

    List<RandomClass1> randomClassList = new ArrayList<RandomClass1>(); 
    randomClassList.add(new RandomClass1()); 
    randomClassList.add(new RandomClass1()); 
    process(randomClassList); 
    process2(randomClassList);//compile time error in this line 
} 


private static void process(List<? extends Serializable> list){ 
    Iterator<? extends Serializable> itr = list.iterator(); 
    while (itr.hasNext()){ 
     Serializable s = itr.next(); 
     System.out.println("process1: " + s.getClass()); 
    } 
}  

private static void process2(List<Serializable> list){ 
    Iterator<Serializable> itr = list.iterator(); 
    while (itr.hasNext()){ 
     Serializable s = itr.next(); 
     System.out.println("process2: " + s.getClass()); 
    } 
} 

輸出是

過程1:RandomClass1

過程1:RandomClass2

過程2:RandomClass1

過程2:RandomClass2

過程1:RandomClass1

process1:RandomClass1

4

如何Java泛型手柄將這些序列化對象名單?

編譯器檢查你添加的是一個Serializable。

我知道的事實,我們無法定義的參考列表L

其實你可以。

但是我沒有看到我的List serializables引用有任何編譯問題。

我不明白爲什麼你會得到編譯錯誤。

我在這裏的第二個問題是如何檢索我的元素添加到這個可序列化的列表中的這些對象?

與您的任何列表相同的方式。得到(n)或迭代它們。

但是從我的列表中檢索對象後,在我的班級中查看元素的正確方法是什麼?

正確的方法是實現你的程序必須做的最簡單和最清晰的方法。

相關問題