2015-09-22 129 views
1

我有我想概括兩類:T是什麼類型?

public class General<T> { 
    T content; 
    setContent(T content) { ... };  
} 
public class Specific { 
    Foo text; 
    setText(Foo text) { ... }; 
} 

T可以有三種不同的類型,所有這些類。 Foo是其中之一,Pair是另一個。 我要介紹一個抽象超推廣到的屬性的訪問:

public abstract class Superclass { 
    abstract void setText(Foo text); 
} 

這兩個類(GeneralSpecific)延伸此超類。但現在我已經實現了類General的制定者一個問題:

public void setText(Foo text) { 
    if (T is of type Foo) content = (T) text; 
    if (T is of type Pair) ((Pair)content).setHead(text); 
    ... 
} 

我有什麼寫的,而不是is of type? Java中有沒有這樣的表達式在編譯時被評估?

我可以檢查什麼類型的content是,但我想這不會工作,如果是null。另外,我可以用? extends Object之類的東西代替T,但是如何創建(之前)T的實例呢?

我用Google搜索了一下,但是我找不到這個特定問題的充分答案。

+6

有沒有表達式會在編譯時進行評估,因爲泛型代碼將被共享。相反,你可以像'class GeneralInteger extends General '這樣做,並在其中覆蓋'setText'。 –

+1

你幾乎不能做你想做的事情,而且必須找到另一種方法。其他一些評論已經提出了一些方法來實現它。 –

回答

0

您可以創建這些類2種不同的方法:

public abstract class Superclass { 
    abstract void setText(Foo text); 
    abstract void setText(Pair text); 
} 
+0

當我使用這些類時,我通常不知道我是否有一般或特定的對象。如果我只介紹其中的一種方法,那麼我需要在每個地方使用'instanceof'的ifs。沒有選擇。 – sinned

0

而不必一個抽象類使用的接口的概念(與父參考)然後ü可以動態決定的....

+0

所以我有一個由Foo,Pair和我可能在其中使用的其他類型實現的接口。當然這是'正確'的解決方案,但在我的情況下,我更喜歡解決方案較少侵入。 – sinned

相關問題