gpt4 book ai didi

java - 使用反射在运行时创建类

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:08 25 4
gpt4 key购买 nike

我必须创建一个对象列表,这些对象是根据作为输入接收的一些类的名称进行配置的。

对于每个对象,我必须调用一个方法,该方法添加动态创建的操作。

但是我不知道如何解决这个问题。请参阅下面的示例。

String className; // this is an input parameter

final Class<?> classType = Class.forName(className);

// here I would like to use classType instead of "?" but it gives me an error.
Task<?> task = TaskFactory.createTask((String)classType.getField("_TYPE").get(null)));

tasks.put(task, null);

task.addOperation(new Operation<classType>() { // this gives an error

@Override
public void onNewInput(classType input) { // this gives an error

System.out.println(input)
}
});

最佳答案

从评论中可以看出,周围的基础设施和意图并不完全清楚。但是,您可以使用“帮助程序”方法来实现一定程度的类型安全,该方法捕获给定任务的类型,并允许您在内部使用此类型:

public class RuntimeType
{
public static void main(String[] args) throws Exception
{
String className = "";
final Class<?> classType = Class.forName(className);
Task<?> task = TaskFactory.createTask((String)classType.getField("_TYPE").get(null));
addOperation(task);
}

private static <T> void addOperation(Task<T> task)
{
task.addOperation(new Operation<T>()
{
@Override
public void onNewInput(T input)
{
System.out.println(input);
}
});
}
}

class TaskFactory
{
public static Task<?> createTask(String string)
{
return null;
}
}

class Task<T>
{
public void addOperation(Operation<T> operation)
{
}

}

interface Operation<T>
{
void onNewInput(T input);
}

关于java - 使用反射在运行时创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450125/

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