【发布时间】:2013-08-28 21:59:14
【问题描述】:
我有一个超类 A,以及扩展 A 的 B、C 和 D 类。
class A {}
class B extends A {}
class C extends A {}
class D extends A {}
然后我有一个这样的列表:
[B.class, C.class, D.class]
我从列表中随机抽取一个项目并像这样实例化它:
Object obj = list.get(i).newInstance()
现在我需要将 obj 传递给一个接受 A 类型对象作为参数的方法。
A a = (A) obj
导致java抛出异常(InstantiationException或IllegalAccessException,我不知道,因为android studio不会在catch内的断点处停止,并且任何从catch中保存异常信息的尝试都会导致null.. .).
我明白为什么我不能动态指定新对象类型然后将 obj 转换为该类型,但如果它们都共享共同的父对象,我不明白为什么它不起作用。
谁能告诉我如何解决我目前正在做的事情,或者以类似的方式实现同样的事情?
谢谢! /最大
【问题讨论】:
-
你能展示你的方法,你是如何调用它的,以及完整的堆栈跟踪吗?
-
'InstantiationException 还是 IllegalAccessException,我不知道',你希望我们怎么知道?
-
能否请您也显示 newInstance() 方法的代码?
-
@Ankit 这是来自 Java
Class对象的方法:docs.oracle.com/javase/7/docs/api/java/lang/… -
@jbx..谢谢!
标签: java android class casting