我试过了:
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 {}
}
上面的代码会引发未知类“t”
我的问题是:如何传递上述代码。
更新
以下代码无法通过intellij idea语法检查器
public boolean isIns(Object o, Class<?> t) {
return o instanceof t;
}
所以想法中的正确代码是:
public boolean isIns(Object o, Class<?> t) {
return t.isAssignableFrom(o.getClass());
}
更简单的方法是:
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());
}
}
答案 0 :(得分:6)
如果你写x instanceof t
,那么t
必须是一个班级。在isIns
方法中,t
不是类,它是Class
类型的变量。
但是,类Class
确实提供了一些方法,您可以使用这些方法来决定其他类是否是其子类:Class.isAssignableFrom(Class)
。所以你可以改变你的方法:
public boolean isIns(Object o, Class t)
{
return t.isAssignableFrom(o.getClass());
}
(我还更改了你的代码,以便将结果返回给调用者。)
答案 1 :(得分:0)
我不知道您尝试使用自己的方法做什么,但 instanceof 语法错误。
public boolean isIns(Object o, Class t) {
return o instanceof t;
}
instanceof
关键字检查,其Valid类名称不是变量名。这是编译错误。
对于ex:o instanceof String
,如果你写得如下,它将无法编译
public boolean isIns(Object o, String str) {
return o instanceof str; //err, o instance of String is correct way to check.
}
我稍微改变了你的方法签名以匹配语句。
答案 2 :(得分:0)
在下面的代码中,t
应该是Java类的名称(例如String
)。在您的代码中,您传递了一个不合适的变量名称:
public void isIns(Object o, Class t) {
o instanceof t;
}
由于instanceof
检查是单行检查,我不确定为什么要将其包装在方法中。但如果你坚持这样做,也许这就是你想要的:
public static boolean isIns(Object o, Class<?> t) {
return c.isInstance(o);
}
但有两个注意事项:
许多instanceof
项检查通常表明设计不合理。
Java程序员可以更轻松地看到instanceof
而不是isIns(...)
。
答案 3 :(得分:0)
您应该使用Class类的动态等效的instanceof。 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isInstance(java.lang.Object)
public void isIns(Object o, Class t) {
t.isInstance(o);
}
如果需要,请检查空值。
答案 4 :(得分:-1)
也许你想要这样的东西?
public class test2 {
class c {
}
public test2() {
c obj = new c();
System.out.println(isIns(obj));
}
public boolean isIns(Object o) {
return (o instanceof c);
}
public static void main(String argv[]) {
new test2();
}
}
编辑:删除了无情的类参数。