【发布时间】:2013-02-13 17:03:25
【问题描述】:
我正在使用以下语句加载一个类:
Class classToLoad = Class.forName("com.somePackage.SomeotherPackage.classname" );
后来我使用反射来获取这个类的方法。现在要使用 methodname.invoke() 函数调用方法,我需要加载类的对象。因此我想创建加载类的对象。我尝试这样做:
Object obj = classToLoad.newInstance();
但问题是这样我没有加载类的对象,但我得到了 Object 类的对象。
现在如果我想调用已加载类的函数,我会这样做:
methodName.invoke(obj);
它抛出一个异常:
java.lang.IllegalArgumentException: 对象不是声明类的实例
有人可以帮忙吗?
问题更新:
问题是我需要分配的左侧是不同的类类型,并且该类类型将在运行时决定
对于以下语句:
对象实例 = clazz.newInstance();
“instance”应该是“clazz”类型,而不是“Object”类。
我怎样才能做到这一点?
【问题讨论】:
-
好吧,听起来你的方法不对。请展示一个简短但完整的示例。
-
classToLoad.newInstance();返回类“已存储”intclassToLoad的新实例。您可以通过打印obj.getClass()来检查它,因此您的问题必须隐藏在其他地方。正如 Jon 建议的那样,您应该向我们展示一些我们可以用来重现您的错误的代码,否则我们只能猜测可能出了什么问题。 -
你想要做的通常是通过定义一个抽象方法的抽象父类来解决,你可以将它用于所有子类的接口:
AbstractParentClass obj = (AbstractParentClass) classToLoad.newInstance();
标签: java object reflection instance variable-assignment