Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口泛型和instanceof_Java_Generics_Interface_Instanceof - Fatal编程技术网

Java 接口泛型和instanceof

Java 接口泛型和instanceof,java,generics,interface,instanceof,Java,Generics,Interface,Instanceof,我的接口有一个泛型类型参数。任何实现接口的类都必须声明这种类型,这样以后它的用户就会知道他们得到了什么。现在,我需要检查这些类的instanceof,看看它们是否是Action的实例 我的问题是:如果我这样做了,返回的瞬间会是什么 if (SomeAction instanceof Action<?>) { . . . } 它会返回真还是假?如果我做了SomeAction instanceof Action当您使用instanceof时,Java不关心泛型类型,那会怎么样

我的接口有一个泛型类型参数。任何实现接口的类都必须声明这种类型,这样以后它的用户就会知道他们得到了什么。现在,我需要检查这些类的instanceof,看看它们是否是Action的实例

我的问题是:如果我这样做了,返回的瞬间会是什么

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");
}