Isn't List<List<String>> same as List<Object>
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
如果我写下:
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
我得到一个编译时错误,>> to List
我有点困惑。
如果可以这样做,获得>
1 2 3 4 | List<List<String>> listOfListOfString = ...; List<Object> listOfObjects = listOfListOfString; listOfObjects.add(new Banana()); // now your list of lists of strings contains a banana: oops! |
但是,您可以执行以下操作,这将阻止调用者向列表中添加任何内容:
1 2 3 4 | List<?> query() { // equivalent of List<? extends Object> ... return listOfListOfString; } |
Is
List a supertype ofList ?No, different instantiations of the same generic type for different concrete type arguments have no type relationship.
FAQ102< /块引用>
错误
Type mismatch: cannot convert from List 表示两个对象具有不同的具体参数化类型。>> to List
What is a concrete parameterized type?
An instantiation of a generic type where all type arguments are concrete types rather than wildcards.
FAQ101< /块引用>
更多:
- 如何将父类型列表强制转换为子类型列表?
- list
是list 的子类吗?为什么Java的泛型不是隐式多态的? - 为什么不编译:list
>lss=new arraylist
>(); 来源:Java泛型常见问题:泛型和Parameterized Types