2012-11-21 45 views
1

比方說,我有這個泛型類,做一些工作,併產生一個結果:強制類型安全的通用方法的實現

public abstract class Work<T> { 

    private T mResult; 

    public Work(T result) { 
     mResult = result; 
    } 

    public abstract <T> void doWork(T result); 

    public T getResult() { 
     return mResult; 
    } 
} 

對於這個類的用戶,我想類型安全看起來會像這樣:

Work<MyResult> work = new Work<MyResult>(new MyResult()){ 
    public void work(MyResult result){ 
     //... 
    } 
} 

的問題是Java不以這種方式工作,並迫使我從通用型投:

Work<MyResult> work = new Work<MyResult>(new MyResult()){ 
    public <T> void work (T result){ 
     // (MyResult)result - not nice 
    } 
} 

有沒有類似於第一個例子那樣的方式來保證類型安全?

感謝, 張志賢

回答

4

你不需要在doWork聲明的<T>,因爲你要爲使用在類級聲明的筆 - 你需要

public abstract void doWork(T result); 

的目前的聲明與

public abstract <A> void doWork(A result); 

它不一定和你班上的其他人一樣。

0

試試這個:

Work<MyResult> work = new Work<MyResult>(new MyResult()){ 
    public void work(MyResult result){ 
     // Do something 
    } 
} 

您當前的Work類的設計是有點奇怪。我不確定爲什麼你的doWork方法需要一個結果對象作爲參數。抽象類也似乎提供了很少的功能(儘管我很欣賞這可能是一個原型)。也許考慮一個接口,而不是:

public interface Work<T> {  

    public T doWork(); 
} 
相關問題