以下哪项更好?
a instanceof B
Run Code Online (Sandbox Code Playgroud)
要么
B.class.isAssignableFrom(a.getClass())
Run Code Online (Sandbox Code Playgroud)
我所知道的唯一区别是,当'a'为null时,第一个返回false,而第二个抛出异常.除此之外,他们总是给出相同的结果吗?
鉴于a Class<?> superType和a Object subInstance,它们之间有什么区别
superType.isInstance(subInstance)
Run Code Online (Sandbox Code Playgroud)
和
superType.isAssignableFrom(subInstance.getClass())
Run Code Online (Sandbox Code Playgroud)
(如果有的话)?
我的程序倾向于使用大量的包装异常(SwingWorker例如,包装所有异常ExecutionException).所以,我正在尝试编写一个方法,允许我检查异常或其任何原因是否instanceof是异常类型,但我不知道如何(如果可能的话)传递JUST类名作为方法的参数.
到目前为止,我有这个:
public static boolean errorOrCausesInstanceOfClass(Throwable e, Class c) {
return e != null && (e.getClass().equals(c) || (e.getCause() != null && errorOrCausesInstanceOfClass(e.getCause(), c)));
}
Run Code Online (Sandbox Code Playgroud)
但这只有在e.getClass()完全相同的情况下才有效c.getClass().但是我想检查使用instanceof以捕获子类.
有没有办法实现这个目标?
考虑最简单的示例。我们有
public class Foo {}
Run Code Online (Sandbox Code Playgroud)
因此我们可以说
Foo.class // ==> class Foo
Run Code Online (Sandbox Code Playgroud)
因此,Foo应该合理地认为应该是a java.lang.Class,因为我们显然可以访问它,并且可以在当前上下文中对其进行操作。然而
Foo instanceof java.lang.Class
Run Code Online (Sandbox Code Playgroud)
引发错误
cannot find symbol
symbol: variable Foo
Foo instanceof java.lang.Class
^-^
Run Code Online (Sandbox Code Playgroud)
但是,这与instanceof本身无关。只是
Foo
Run Code Online (Sandbox Code Playgroud)
仅在OpenJDK Shell中会产生相同的错误。
Foo如果Foo当前上下文中不存在属性,我们如何访问?
因此,我想要一个类型列表,然后遍历该列表并检查对象是否是该列表中类型的实例。
这就是我想像的那样,但是那不是Java语法。Type1.class也不起作用
List<Object> types = new ArrayList();
types.add(Type1);
types.add(Type2);
for (Object type : types) {
if (someObject instanceof type) {
doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
或者用同样的事情List<Class>或类似的东西
这显然行不通,但是我不知道什么是最好的方法。当然,我可以对要检查的每个对象进行硬编码,但这似乎并不那么优雅。
我试图part与c构造函数给出的类进行比较,但由于某种原因,我的IDE会弹出一个警告,它始终为false.
Class<? extends Part> c;
public Slot(Class<? extends Part> c){
this.c = c;
}
public boolean addItem(Part part){
return part instanceof c;
}
Run Code Online (Sandbox Code Playgroud)
这是为什么的instanceof语句总是假的,什么是正确的语法比较part有c?
我想知道如何将String转换为我自己的类,就像org.json.JSONObject那样.
您可以将String:{"key":"value"}转换为JSONObject,即使JSONObject仅从Object继承.
如何仅在继承Object时获取要转换为MyOwnClassObject的String?