1

我有一个 ThreadPool 类,它有一个方法 add ,它需要 aRunnable和若干毫秒作为调度任务:

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.";
    }
}
4

2 回答 2

1

我相信你的错误是你调用getClass()了太多次:

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

taskType是您要查找的类(例如MyTask)。它的(原始)类型以及对 is 的多余调用返回的getClass()内容java.lang.Class

public String toString(){
    return taskType.getName() + ": " + (frequency / 1000) + " seg.";
}
于 2012-05-31T07:04:41.477 回答
-1

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

于 2012-05-31T07:00:04.213 回答