ror*_*oco 1 java class instanceof
我试过了:
package ro.ex;
import java.io.IOException;
import java.lang.reflect.Type;
class Ex {
public boolean isIns(Object o, Class t) {
o instanceof t;
}
public static void main(String[] args) throws IOException {}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将引发未知类"t"
我的问题是:如何传递上述代码.
更新:
以下代码无法通过intellij构思语法检查器
public boolean isIns(Object o, Class<?> t) {
return o instanceof t;
}
Run Code Online (Sandbox Code Playgroud)
所以正确的代码是:
public boolean isIns(Object o, Class<?> t) {
return t.isAssignableFrom(o.getClass());
}
Run Code Online (Sandbox Code Playgroud)
更简单的方法是:
package ro.ex;
import java.io.IOException;
import java.lang.reflect.Type;
class Ex {
public boolean isIns(Object o, Class t) {
return t.isInstance(o);
}
public static void main(String[] args) throws IOException {
Object r = new Ex().isIns("", String.class);
System.out.println(r + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
如果你写x instanceof t,那么t必须是一个班级.在您的isIns方法中,t不是类,它是类型的变量Class.
Class但是,该类确实提供了一些方法,您可以使用这些方法来决定其他类是否是它的子类:Class.isAssignableFrom(Class).所以你可以改变你的方法:
public boolean isIns(Object o, Class t)
{
return t.isAssignableFrom(o.getClass());
}
Run Code Online (Sandbox Code Playgroud)
(我还更改了你的代码,以便将结果返回给调用者.)