在豆

2012-05-31 51 views
1

我有了一個方法添加這需要一個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."; 
    } 
} 

回答

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

可以使用的newInstance()創建新的實例,可以(使用instanceof運算符)檢查類型。您也可以使用的getName(類的名稱),並使用字符串比較

+0

看不出OP如何回答問題。 – darrengorman

+0

@milkplusvellocet op的q正在討論*檢查任務類型*。我假設有差異類型的任務,並且需要檢查哪些類型的任務存在。如果意圖只是打印任務的名稱,getName()就足夠了。 –

+0

'您可以使用newInstance()創建新實例。'爲什麼只是爲了檢查已經可用的類型信息而創建一個新對象。 '可以檢查類型(使用instanceof操作符)'。'你將使用instanceof檢查哪些類型? – darrengorman