Java 检查泛型对象变量的类
我正在编写一个函数来测试Object类型的变量是否属于给定的类型。例如,如果我输入Java 检查泛型对象变量的类,java,Java,我正在编写一个函数来测试Object类型的变量是否属于给定的类型。例如,如果我输入“thisastring”和string.class作为参数,它应该返回true 我尝试了以下代码: public static boolean Debug(Object variable, Class<?> testClass) { if (variable instanceof testClass) { return true; } return fa
“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)
vsDebug(variable,testClass)
。虽然正确,但我质疑这种方法的价值。与其调用Debug(someVariable,String.class)
,为什么不事先调用String.class.isInstance(someVariable)
?@Zabuza当然可以,但这是留给读者的练习;)