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

标签 java reflection

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

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

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

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/

相关文章:

java - 通过使用助手生成 html

java - 加载包中的每个类

Java Reflection//不能设置java.lang.Boolean为(boolean)true

java - 保存时间戳对象列表的数据结构

c# - 如何迭代 C# 类查找特定类型的所有实例,然后在每个实例上调用一个方法

c# - 判断两个不同的 PropertyInfo 是否来自同一个接口(interface)?

c# - 确定 Equals() 是否是重写?

java - Java 代码可以判断它是否在应用服务器中吗?

java - 类型转换值(value)和由此产生的数学

java - 使用 JavaFX 将视频循环到 JPanel 时的线程