Java 接口泛型和instanceof
我的接口有一个泛型类型参数。任何实现接口的类都必须声明这种类型,这样以后它的用户就会知道他们得到了什么。现在,我需要检查这些类的instanceof,看看它们是否是Action的实例 我的问题是:如果我这样做了,返回的瞬间会是什么Java 接口泛型和instanceof,java,generics,interface,instanceof,Java,Generics,Interface,Instanceof,我的接口有一个泛型类型参数。任何实现接口的类都必须声明这种类型,这样以后它的用户就会知道他们得到了什么。现在,我需要检查这些类的instanceof,看看它们是否是Action的实例 我的问题是:如果我这样做了,返回的瞬间会是什么 if (SomeAction instanceof Action<?>) { . . . } 它会返回真还是假?如果我做了SomeAction instanceof Action当您使用instanceof时,Java不关心泛型类型,那会怎么样
if (SomeAction instanceof Action<?>) {
. . .
}
它会返回真还是假?如果我做了
SomeAction instanceof Action
当您使用instanceof
时,Java不关心泛型类型,那会怎么样。引述:
因为Java编译器会擦除泛型代码中的所有类型参数,所以无法验证在运行时使用泛型类型的参数化类型
因此,您可以针对操作
或操作
进行测试,但如果您尝试针对操作
进行测试,则会出现编译器错误。错误消息的信息非常丰富:
无法对参数化类型操作执行instanceof check。改用表单操作,因为更多的泛型类型信息将在运行时被擦除
我实现了它,它返回true 另外,如果您将泛型一起省略,如以下所示:
if (SomeAction instanceof Action) {
. . .
}
如果您试图在该If操作中实际包含操作的泛型类型,则代码不会编译,并显示以下消息:
的实例的泛型类型非法
例如:
if (action instanceof Action<String>) {
System.out.println("is Action");
} else {
System.out.println("is not Action");
}
if(动作的动作实例){
System.out.println(“is动作”);
}否则{
System.out.println(“不是动作”);
}
好的,这很清楚。事实上,还是保留语法比较好,还是没有区别?@Creator13:据我所知,没有区别,但由于错误消息更倾向于
语法,我还是坚持这样做。
if (action instanceof Action<String>) {
System.out.println("is Action");
} else {
System.out.println("is not Action");
}