Java 你能做什么’;与泛型类型无关
我在查看Java泛型时发现了以下限制:-Java 你能做什么’;与泛型类型无关,java,generics,Java,Generics,我在查看Java泛型时发现了以下限制:- 创建该静态类型的数组。这是最烦人的,但它是有道理的 因为您将创建一个对象数组 调用instanceof。这是不允许的,因为在运行时List和 List由于类型擦除,Java看起来也一样。 但是下面的代码编译得很好 interface Shippable<T> { void ship(T t); } class ShippableAbstractCrate<H> implements Shippable<H> {
instanceof
。这是不允许的,因为在运行时List
和
List
由于类型擦除,Java看起来也一样。
但是下面的代码编译得很好
interface Shippable<T> {
void ship(T t);
}
class ShippableAbstractCrate<H> implements Shippable<H> {
public void ship(H t) {
if(t instanceof Object) {
//do something
}
}
}
接口可交付{
无效船舶(T);
}
类ShippableStructCrate实现可装运{
公共无效船舶(HT){
if(对象的t实例){
//做点什么
}
}
}
if(t instanceof H)
如果(对象的t实例)ShippableAbstractCrate
类中定义以下静态变量:
static H someName;
你的问题到底是什么?我在问为什么所有3点都是泛型的限制?真的为什么?答案是,“因为在运行时,泛型类型信息被擦除”。正如任何3秒钟的谷歌搜索都会告诉你的那样。不,我找不到我的答案,2不是(也?)像
H instanceof String
?@CarlosHeubergerinstanceof
的第一个操作数无论如何都不能是一个类型,因此H instanceof String
会因不同的原因失败,与泛型无关(就像Integer instanceof String
会失败一样,除非你在作用域中有一个名为Integer
的变量)。但这不是确切的意思吗,因为提到List
在运行时看起来与List
相同吗?还是应该是t instanceof List
不可能?