我知道这是可能的,但有什么用?因为它只能转换与被转换对象相同的类型吗?
class Example<X>{
//statements
}
//then this is declared
Example<Integer> x = new Example<Integer>();
//This is allowed
(Example<Integer>) x;
//this is not allowed, so what's the use?
(Example<Long>) x;
答案 0 :(得分:3)
我看到第一个用了一些。由于java在运行时决定类型,在这种特殊情况下你可以将x声明为对象的实例,并通过在该行中向下转换它,你告诉编译器x实际上是Example。
我认为你的例子中不允许第二个,因为Long不是Integer的子类,更像是兄弟,因为我认为它们都继承自Number。
所以,如果你做过类似的事情:
Example<Number> x = new Example<Number>();
(Example<Integer>) x;
(Example<Long>) x;
然后,如果你将x放在像访问者那样的超载状态,你的x就会在你的Example<Long>
实现中而不是Example<Integer>
实现中出现。
猜猜我在那里有点混乱,但希望它有所帮助。
答案 1 :(得分:0)
这本书的引用并没有说你通过例子来表达。该书说,只要类型参数相同,您就可以简单地应用正常的强制规则。
答案 2 :(得分:0)
那有什么用呢?
有很多用途。
例如,将通配符参数转换为特定参数或更具体的通配符参数:
Example<?> x;
Example<? extends Number> y;
Example<Integer> z;
y = (Example<? extends Number>)x;
z = (Example<Integer>)x;
z = (Example<Integer>)y;
或用于将实际类转换为更具体的类:
Example<Integer> x;
SubExample<Integer> y;
y = (SubExample<Integer>)x;