Mic*_*el1 5 java generics raw-types
我一直在阅读 Java 泛型教程和 Stackoverflow 中处理泛型的一些线程,但仍然无法理解特定的情况。这里是:
public class Box<T>
{
private T t;
public T getT ()
{
return t;
}
public void setT (T t)
{
this.t = t;
}
public static void main (String[] args)
{
Box<Integer> intBox = new Box<Integer>();
Box rawBox = intBox;
rawBox.setT("NBA");
System.out.println(rawBox.getT());
System.out.println(intBox.getT());
/*1*/ //System.out.println(intBox.getT().toString());
}
}
Run Code Online (Sandbox Code Playgroud)
这是交易,我理解的第一个打印,也就是说,
System.out.println(rawBox.getT());
Run Code Online (Sandbox Code Playgroud)
打印 NBA,因为 rawBox 是 Box T 的原始类型,它“给出”我们对象。
我没有得到的是第二次打印:
System.out.println(intBox.getT());
Run Code Online (Sandbox Code Playgroud)
打印 NBA. intBox 是一个泛型类型(在本例中为 Box of Integers),这意味着它的 getter 方法应该返回类型 T 的值(在本例中为 Integer),所以我的理解是保存在那里的 String 对象应该被转换到 Integer(因为这是赋予 Box T 的参数类型)并且应该在运行时引发 ClassCastException,但它没有发生,为什么呢?
顺便说一句,注释号 / 1 / 增加了混乱,因为如果我取消注释它,它将导致 ClassCastException 在运行时引发(字符串无法转换为整数),我不明白
谢谢大家:)
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |