gpt4 book ai didi

java - 使用反射动态创建和分配对象

转载 作者:行者123 更新时间:2023-12-01 04:50:14 26 4
gpt4 key购买 nike

我正在使用以下语句加载一个类:

Class classToLoad = Class.forName("com.somePackage.SomeotherPackage.classname" );

后来我使用反射来获取这个类的方法。现在,为了使用 methodname.invoke() 函数调用方法,我需要加载类的对象。因此我想创建加载类的对象。我尝试这样做:

Object obj = classToLoad.newInstance();

但问题在于,这样我没有加载类的对象,但得到了 Object 类的对象。

现在,如果我想调用已加载类的函数,我会这样做:

methodName.invoke(obj);

它抛出异常:

java.lang.IllegalArgumentException: object is not an instance of declaring class

有人可以帮忙吗?

问题更新:

问题是我需要作业的左侧是不同的类类型,并且该类类型将在运行时决定

对于以下声明:

对象实例 = clazz.newInstance();

“instance”应该是“clazz”类型,而不是“Object”类。

我怎样才能实现这个目标?

最佳答案

当一切设置正确时,它可以正常工作:

import java.lang.reflect.Method;

class Foo {

public Foo() {
}

public void sayHello() {
System.out.println("Hello");
}
}

public class Test {

public static void main (String[] args) throws Exception {
Class<?> clazz = Class.forName("Foo");
Method method = clazz.getMethod("sayHello");
Object instance = clazz.newInstance();

method.invoke(instance); // Prints Hello
}
}

我的猜测是,您获取的方法 (methodName) 实际上并不是从 classToLoad 获取的。

关于java - 使用反射动态创建和分配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com