2016-05-23 54 views
1

我在高級Java的泛型知識的初級水平相對比例的多重約束類型定義的接口。我想定義一個接口,這樣的事情使用Java泛型

public interface Transformer { 
<T extends String & List<String>> T transform(String input) throws    
    IOException; 
} 

我的實現類如下所示:

public Class A implements Transformer{ 
    .... 
    .... 

    @Override 
    public <T extends String & List<String>> T transform(String input)  throws IOException { 
    String response = "a"; 
    return response; // compilation error "Incompatible Types: Required T but found java.lang.String" 
    } 

} 

我想擁有的一切:實現類應該能夠傳遞一個字符串輸入返回類型可以是String或List。實現類完全有自由選擇任何一種返回類型。

問題: 1.爲什麼編譯錯誤「Incompatible Types:Required T但是發現java.lang.String」顯示出來?

+0

變換方法的返回值需要延伸字符串(它不能自字符串是最終)和實現List 接口。我非常懷疑這是你想要的東西......你應該改變你的問題,以便你的目標明確... –

回答

2

我想你誤會了路口的類型。

定義你有辦法:T是一個字符串andList<String>,而不是字符串ORList<String>,這是不可能的,因爲字符串不是List<String>並沒有什麼可以擴展StringList<String>因爲Stringfinal

這樣的定義是有道理的,如果你有兩個接口之間的交叉點,因爲Java的支持多接口繼承,或者是一種實現,多個接口,因爲一個類可以擴展另一個實施和實現多個接口。

因爲List<String>能夠有零個或多個字符串,所以您可以使您的方法返回List<String>

+0

感謝您的迴應。我明白你的答案。我實際上是想看看Java Generics是否有支持的選項,比如T extends String或者列表。這可能是愚蠢的,但看看文檔和教程。如何解決以定義接受字符串輸入並返回String或Collection類型的響應的接口? – saripallivskp

+0

@saripallivskp正如我所說的,一個Collection可以有零個或多個值。 –