我有一个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.";
}
}
答案 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比较