是不是Java中String的子类型Object?
那么,为什么我不能将类型的对象传递List<String>给接受List<Object>作为参数的函数?但是,我可以将这样的对象传递给一个接受List作为参数的函数.
Ste*_*n C 11
String不是String中Object的子类型吗?
是的,但这不是List<String>一个子类型List<Object>.
考虑这个例子:
List<String> l1 = new ArrayList<String>();
List<Object> l2 = l1; // This is a compilation error in real Java
l2.add(new Integer(42));
String oops = l1.get(0);
Run Code Online (Sandbox Code Playgroud)
如果(假设)List<String>是子类型List<Object>,那么你最终会在最后一个语句中Integer为一个String变量赋值.简而言之,我们会破坏静态类型的安全性.
但是,我可以将这样的对象传递给接受List作为参数的函数.
是的,这是事实.但是,您正在处理原始类型,并且在将对象从列表中拉出时必须使用显式类型转换.例如,上面的内容需要重写如下:
List<String> l1 = new ArrayList<String>();
List l2 = l1;
l2.add(new Integer(42));
String oops = (String) l1.get(0);
Run Code Online (Sandbox Code Playgroud)
请注意,类型转换意味着我们必须用运行时类型安全替换静态类型安全性.(当然,在这种情况下,类型转换会在运行时失败,因为实例的类型错误.)
| 归档时间: |
|
| 查看次数: |
4222 次 |
| 最近记录: |