2013-07-15 74 views
1

我有一個這樣的接口:兩種不同類型接口的實現 - 這是不可能的嗎?

interface Transformer { 
    public String transform(List<Object> elements); 
} 

實現:

class XMLTransformer implements Transformer{ 
    public String transform(List<MyXMLElements> elements); 
} 

class TXTTransformer implements Transformer { 
    public String transform(List<MyTXTElements> elements); 
} 

但請注意,MyXMLElements和MyTXTElements沒有一個共同的父。那些是完全不同的對象。

在界面中嘗試這個還有:

public String transform(List<? extends Object> elements); 
    public String transform(List<?> elements); 
    public String transform(List<T extends Object> elements); 
    public String transform(List<T> elements); 

有沒有辦法來實現這一目標?

回答

1

您可以使用通用接口:

interface Transformer<T> { 
    public String transform(List<T> elements); 
} 

,使您的類實現一個泛型類型的不同實例:

class XMLTransformer implements Transformer<MyXMLElements> { 
    public String transform(List<MyXMLElements> elements) { 
    } 
} 

class TXTTransformer implements Transformer<MyTXTElements> { 
    public String transform(List<MyTXTElements> elements) { 
    } 
} 

這裏,Transformer<MyXMLElements>是通用型Transformer<T>的一個實例。 Simlarly Transformer<MyTXTElements>是同一泛型類型的另一個實例。

+0

當我調用XML或TXT類型的方法時,它會自動識別使用哪個類/方法? –

+0

@KevinRave。對。究竟。對於使用'XMLTransformer'實例的'Transformer '引用,它將調用'XMLTransformer'中的方法。嘗試實施它。 –

+0

謝謝@Rohit Jain! –

0

這是因爲generics type erasure。對於JVM,您正在使用兩種情況下的元素列表實現接口,這是完全可以接受的。

2

這應該是可能的仿製藥 - 聲明泛型類型參數的接口:

interface Transformer<T> { 
    public String transform(List<T> elements); 
} 

那麼你的實現類只是有到位接口的泛型類型參數的使用實際的類名:

class XMLTransformer implements Transformer<MyXmlElements>{ 
    public String transform(List<MyXMLElements> elements) {} 
} 

class TXTTransformer implements Transformer<MyTXTElements> { 
    public String transform(List<MyTXTElements> elements) {} 
} 
相關問題