Java类转换抛出异常

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)

打印"真实"