2012-06-14 143 views
4

如果說我有一些通用類,例如:爲某些類型的類型擴展泛型類?

public class Attribute<T> { 

} 

是否有可能現在有針對特定類型的具體方法?即爲某些類型的類擴展泛型類?

例如:

我要額外的方法添加到Attribute<String>,但不是說Attribute<Integer>

+0

你當然可以這樣做。 – bluevector

+0

你可以給你的思維的具體方法的例子嗎?這可能是你真正需要的屬性與像「公共U doSomething(T ARG)」 – David

+0

類似的東西:屬性'可能有一個方法'.readToFile(字符串文件名)返回文件... ... – Larry

回答

3

沒有在Java中沒有這樣的直接可能性。

但你可以有StringAttribute延伸Attribute<String>,並增加了它,你想方法。您可以以依賴注入的方式創建一種工廠,這將構建例如Attribute<Integer>IntegerStringAttributeString

+0

這是值得指出的是,一旦新的方法添加到實現類,它將不再類拋出UnsupportedOperationException能夠作爲Attribute對象傳遞,因爲這些不是接口的方法。如果這很重要,那麼很可能繼承設計是不正確的。 – David

+0

@大衛:的確,用戶的代碼將需要或者是不那麼通用的,檢查實際的類型,或者忽略一般情況下,增加的方法。無論如何,在特殊情況下添加某些東西的設計看起來可疑。 – Vlad

2

不是直接的,但你可以做到這一點...

public class StringAttribute extends Attribute<String> 
{ 
    public String myNewMethod() ... 
    .... 
} 
1

你可以做這樣的事情:

public abstract class Attribute<T> { 
    public abstract T getValue(); 
} 

public class Attr1 extends Atrribute<String> { 

    @Override 
    public String getValue() { 
     return "smth" 
    } 
} 

創建一個抽象類,這將有通用型T和抽象方法具有相同的通用類型。然後其他類可以通過指定真實對象而不是泛型來擴展它。

+0

我認爲這個問題是問的是,可以實現不包括所有接口的API的 – David

0

你的類應該是抽象的:

public abstract class Attribute<T> { 
    void someMethod(T object); 
} 

,然後添加子類,如:

public AttributeString<T extends String> extends Attribute<T>{ 
    void someMethod(T object){ 
    } 
}