泛型转换如何在Java中工作
如果我声明一个我碰巧知道的列表“myList”只包含字符串,我可以将其转换为一个列表而不会出现任何问题,那么在幕后将列表转换为一个字符串列表究竟是怎么回事
List myList = new ArrayList();
List<String> myStringList = (List<String>) myList;
如果我将列表创建为对象列表,我会假设同样的事情也适用,但我不能再将其转换回字符串列表,这是什么原因
List<Object> myObjList = new ArrayList<Object>();
List<String> myStringList = (List<String>) myObjList; // Can't do this!
# 1 楼答案
从技术上讲,通过
@FunctionR
添加一个子句来回答但是
Objects
可以是String
Object
是String
的基类。所以你可以双向施放比如
所以
String
可以是Object
但是在{}和{}
你应该这么做
# 2 楼答案
出于与前泛型代码兼容的原因而工作。它可以工作,但如果原始
List
不仅包含Strings
,它可能会在运行时给您带来错误泛型应该在编译时保护你。它们不允许您将
list of Objects
强制转换为list of String
,因为List<Objects>
可能包含不属于String
的对象,并且会在运行时导致错误# 3 楼答案
字符串是对象,但对象不是字符串,这就是为什么不能执行第二个代码
我喜欢这样想:狗是一种动物,可以表现得像动物,但动物不是狗
好消息