将类类型存储在bean中

时间:2012-05-31 06:53:11

标签: java generics

我有一个ThreadPool类,它有一个方法add,需要Runnable和一些毫秒作为计划任务:

public static void addScheduler(Runnable r, long millis) {
 //scheduling code
 //now I want to save it to check later
 ScheduledTask st = new ScheduledTask();
 st.setTaskType(r.getClass());
 st.setFrequency(millis);
 persistentes.add(st); //this is an ArrayList<ScheduledTask>
}

现在我想将任务信息存储到ArrayList以便稍后检查,但是当我保存任务的信息并检查taskType时,它总是java.lang.Class。我明白这是因为java类型的擦除,但有没有办法存储类的类型?

这是我的ScheduledTask类:

public class ScheduledTask {

    private Class<?> taskType;
    private long frequency;

    public Class<?> getTaskType() {
        return taskType;
    }

    public void setTaskType(Class<?> taskType) {
        this.taskType = taskType;
    }

    public long getFrequency() {
        return frequency;
    }

    public void setFrequency(long frequency) {
        this.frequency = frequency;
    }

    public String toString(){
        return taskType.getClass().getName()+ ": " + (frequency / 1000) + " seg.";
    }
}

2 个答案:

答案 0 :(得分:1)

我相信你的错误就是你多次致电getClass()

public String toString(){
    return taskType.getClass().getName() + ": " + (frequency / 1000) + " seg.";
}

taskType是您正在寻找的课程(例如MyTask)。它的(原始)类型和多余的getClass()调用返回的内容是java.lang.Class

public String toString(){
    return taskType.getName() + ": " + (frequency / 1000) + " seg.";
}

答案 1 :(得分:-1)

您可以使用newInstance()创建新实例,并可以检查类型(使用instanceof运算符)。您还可以使用getName()获取类的名称并使用String比较