gpt4 book ai didi

Java 反射

转载 作者:行者123 更新时间:2023-12-02 07:58:57 29 4
gpt4 key购买 nike

我有一个抽象类“A”,类“B”和“C”扩展了 A。我想在运行时根据某些变量创建这些实例。如下所示:

public abstract class A {
public abstract int count();
}

public class B extends A {
public int count () {
//print 10;
}
}

public class C extends A {
public int count () {
//print 20;
}
}

我将使用下面的代码来调用方法计数:

String token;
int i = 10;
if (i == 10) //edit
token = "B";
else
token = "C";

A a;
try {
a = (A) (Class.forName("org.source."+token)).newInstance();
} catch (Exception e) {
//print e
}

a.count();

由于我是java反射的新手,这里有我的两个问题:

  1. 我在上面所做的正确吗(编辑:如果是默认构造函数)? (我猜是的)

  2. 如果调用默认构造函数(不带参数),则上述内容有效。如果我有接受参数的构造函数,我将如何处理这种情况。我不太确定如何在上述情况下使用 Constructor.newInstance()。

感谢任何帮助,

最佳答案

是的,它会起作用。

如果您想使用默认(无参数)构造函数之外的构造函数,请继续阅读。

假设您想要使用 intString 参数调用构造函数。这是执行此操作的代码:

Class<?> clazz = Class.forName("org.source."+ token );
Constructor<?> constructor = clazz.getConstructor(int.class, String.class);
Object object = constructor.newInstance(1, "hello");

关于Java 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9205399/

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