使用反射在运行时创建类

时间:2014-03-17 08:57:31

标签: 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)
   }
});

1 个答案:

答案 0 :(得分:1)

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

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);
}