Max*_*ord -4 java android casting class
我有一个超级A,B,C和D类扩展A.
class A {}
class B extends A {}
class C extends A {}
class D extends A {}
Run Code Online (Sandbox Code Playgroud)
然后我有一个这样的列表:
[B.class, C.class, D.class]
Run Code Online (Sandbox Code Playgroud)
我从列表中取一个随机项并实例化它:
Object obj = list.get(i).newInstance()
Run Code Online (Sandbox Code Playgroud)
现在我需要将obj传递给一个接受A类对象作为参数的方法.
A a = (A) obj
Run Code Online (Sandbox Code Playgroud)
导致java抛出异常(InstantiationException或IllegalAccessException,我不知道因为android studio不会在catch中的断点处停止,并且任何尝试从catch中保存有关异常的信息都会导致null ...).
我理解为什么我不能动态指定新的对象类型然后将obj强制转换为该类型,但如果它们都共享公共父类型,我不明白为什么它不起作用.
任何人都可以告诉我如何解决我目前正在做的事情,或以类似的方式实现同样的事情?
谢谢!/最大
小智 6
newInstance方法可以抛出InstantiationException或IllegalAccessException,因此如果此调用未包含在try/catch中,您可能会在IDE中看到警告.你的简单例子似乎工作得很好.
class A {}
class B extends A {}
class C extends A {}
public class Test {
public static void main(String[] args) throws Exception {
List<Class> list = new LinkedList<Class>();
list.add(B.class);
list.add(C.class);
Object obj = list.get(0).newInstance();
A a = (A) obj;
System.out.println(a instanceof B);
}
}
Run Code Online (Sandbox Code Playgroud)
打印"真实"