Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 有没有办法用泛型检查使用的变量类型?_Java_Variables_Generics - Fatal编程技术网

Java 有没有办法用泛型检查使用的变量类型?

Java 有没有办法用泛型检查使用的变量类型?,java,variables,generics,Java,Variables,Generics,以这个伪代码为例: public static<T> int findNumber(T xNumber, double a, int b){ if (xNumber == int) { // do something... return some number... } else { return null; } 有没有一种方法可以在实际运行的Java代码中表达这一点 您不能使用Java代码来表示这种特定情况 你可以找到原因

以这个伪代码为例:

public static<T> int findNumber(T xNumber, double a, int b){
    if (xNumber == int) {
        // do something... return some number...
    } else {
        return null; 
    }

有没有一种方法可以在实际运行的Java代码中表达这一点

您不能使用Java代码来表示这种特定情况

你可以找到原因

但是,如果希望将泛型与整数一起使用,Java类支持泛型。它还实现本机int使用的所有基本操作+-*/%。在您的示例中,您可以使用:

if (xNumber instanceof Integer)
平分

if (xNumber.getClass() == Integer.getClass())
正如@Stultuske在评论中所建议的那样

编辑:关于你的课程设计的评论也是非常真实的。您可能需要重新设计代码,这样就不必检查泛型对象的类型,特别是因为您正在检查单个类类型。

该类几乎隐藏了,但非常有用

public static <T extends Number> int findNumber(...)
    ... xNumber.intValue() // longValue(), doubleValue()
    if (xNumber instanceof Integer) ...

由于类型擦除的原因,执行更多操作是不可行的。

instanceof。。。o、 getClass==Integer.getClass。。正如您所理解的:int是一个原语,所以它不起作用。如果您需要检查泛型对象的类型,这意味着我们的设计有问题。同意@user902383。如果您需要对T泛型定义进行更多的控制,请考虑在方法中设置限制,您可能根本不需要泛型,用编号。和of=荷兰语表示或;。。。一个月后,我明白了,谢谢!