java - List<List<String>> 和 List<Object> 不一样吗

标签 java generics

<分区>

public List<Object> query(){

        List<Object> listToReturn = new ArrayList<Object>();  
        List<String> listOfString = new ArrayList<String>();
        List<List<String>> listOfListOfString = new ArrayList<List<String>>();

        listOfListOfString.add(listOfString);
        listToReturn.add(listOfListOfString);

        return listToReturn;
    }

如果我写的不是上面的方法:

public List<Object> query(){

        List<Object> listToReturn = new ArrayList<Object>();    
        List<String> listOfString = new ArrayList<String>();
        List<List<String>> listOfListOfString = new ArrayList<List<String>>();

        listOfListOfString.add(listOfString);

        return listOfListOfString;

    }

我得到一个编译时错误,Type mismatch: cannot convert from List<List<List<String>>> to List<Object>

我有点困惑。

最佳答案

如果你能做到这一点,调用者会得到一个 List<Object> , 将能够将任何类型的对象添加到列表中,尽管它已被声明为 List<List<String>> .因此,它会破坏列表的类型安全性:

List<List<String>> listOfListOfString = ...;
List<Object> listOfObjects = listOfListOfString;
listOfObjects.add(new Banana()); 
// now your list of lists of strings contains a banana: oops!

但是,您可以执行以下操作,这会阻止调用者向列表中添加任何内容:

List<?> query() { // equivalent of List<? extends Object>
    ...
    return listOfListOfString;
}

关于java - List<List<String>> 和 List<Object> 不一样吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204614/

相关文章:

java - 从 Java 应用程序发送电子邮件的最佳方式

java - JAXB 和 XSLT 性能

java - 在 saveInstanceState 包中存储大数据结构

c# - 我如何编写一个函数来返回从 C# 中的基类派生的任何对象?

java - 对字符串和字符串数组 (String[]) 使用相同的 HashMapM<String,....>

java - 如何将其变成帕斯卡三角形而不是直角三角形?

java - 如何使用 Lombok 在枚举中生成构造函数

arrays - 从结构体中获取相同标签的值的总和

java - 是否可以声明并实现一个方法一次,但改变返回类型以稳健地匹配子接口(interface)?

c# - Windows 窗体中通用事件处理程序的解决方法