簡體   English   中英

可以將任何實現java.io.serializable的類添加到泛型類型的數組列表中<Serializable>

[英]Can any class that implements java.io.serializable be added to an array list of generic type <Serializable>

描述:

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

我知道我們無法定義引用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*/
}

Java Generics如何處理將這些可序列化對象添加到此List?

編譯器檢查您添加的是Serializable。

我知道我們無法定義引用List l

其實你可以。

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

我不明白為什么你會得到編譯錯誤。

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

你可以用任何列表的方式。 使用get(n)或迭代它們。

但是從我的列表中檢索對象后,查看我的類中的元素的正確方法是什么。

正確的方法是實現程序必須執行的最簡單,最清晰的方法。

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

    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());
    }
}

輸出是

process1:RandomClass1

process1:RandomClass2

process2:RandomClass1

process2:RandomClass2

process1:RandomClass1

process1:RandomClass1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM