Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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/2/ionic-framework/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 检查泛型对象变量的类_Java - Fatal编程技术网

Java 检查泛型对象变量的类

Java 检查泛型对象变量的类,java,Java,我正在编写一个函数来测试Object类型的变量是否属于给定的类型。例如,如果我输入“thisastring”和string.class作为参数,它应该返回true 我尝试了以下代码: public static boolean Debug(Object variable, Class<?> testClass) { if (variable instanceof testClass) { return true; } return fa

我正在编写一个函数来测试Object类型的变量是否属于给定的类型。例如,如果我输入
“thisastring”
string.class
作为参数,它应该返回true

我尝试了以下代码:

public static boolean Debug(Object variable, Class<?> testClass) {
    if (variable instanceof testClass) {
            return true;
    }
    return false
}
publicstaticbooleandebug(对象变量,类testClass){
if(testClass的变量instanceof){
返回true;
}
返回错误
}
但是,我得到了一个错误:“testClass无法解析为类型”

我不太清楚这是为什么


任何建议都将不胜感激。

错误消息是正确的:
testClass
不是一个类型,而是一个对象,属于
Class
类型。
instanceof
运算符只能与编译时给定的类型一起使用。相反,您可以使用
Class
对象的方法进行检查:

public static boolean Debug(Object variable, Class<?> testClass) {
    if (testClass.isInstance(variable)) {
            return true;
    }
    return false;
}
publicstaticbooleandebug(对象变量,类testClass){
if(testClass.isInstance(变量)){
返回true;
}
返回false;
}
更好的写作方法是:

public static boolean Debug(Object variable, Class<?> testClass) {
    return testClass.isInstance(variable);
}
publicstaticbooleandebug(对象变量,类testClass){
返回testClass.isInstance(变量);
}

在这一点上,它是如此之小,以至于我开始怀疑这个方法是否值得拥有。

我可能错了,但我认为变量不能作为
操作符的
实例的正确参数,它必须是一个具体的类/接口well,“abc”不是
类的实例,即使类描述了字符串类。您可能需要使用
testClass.isInstance(变量)
。但老实说,这通常表示,您能解释一下为什么要创建这样的代码吗?请遵守Java命名约定。该方法应该被称为
debug
(camelCase,而不是PascalCase)。。。这真的不像OP之前做了很多研究,似乎…@Ghostcatsaysrestatemonica Correct!。。。在这一点上,该方法或多或少是过时的,因为它只是一个更清晰的方法调用的别名
testClass.isInstance(variable)
vs
Debug(variable,testClass)
。虽然正确,但我质疑这种方法的价值。与其调用
Debug(someVariable,String.class)
,为什么不事先调用
String.class.isInstance(someVariable)
?@Zabuza当然可以,但这是留给读者的练习;)