2014-10-17 76 views
5

我知道它可能根本沒有意義,但它只是我的實驗。有3種類型(據我所知)支持方法subString()。我wan't使一個通用的方法是這樣的:Java - 帶有3種類型的有界類型的泛型方法:String,StringBuilder,StringBuffer

public static <T extends String & StringBuilder & StringBuffer> T substr3(T str) { 
     if (str.length() > 3) { 
      return (T) str.substring(0, 3); 
     } 
     return str; 
    } 

它不會編譯這樣的,因爲你需要,你可以使用多個接口,但只有一個類別爲界類型。這種方法應該適用於這3種類型:String,StringBuilder,StringBuffer,但問題是:如何將這3種類型設置爲有界類型?

回答

12

爲什麼不簡單extend CharSequence

public static <T extends CharSequence> T substr3(T str) { 
    if (str.length() > 3) { 
     return (T) str.subSequence(0, 3); 
    } 
    return str; 
} 

CharSequence沒有聲明任何substring方法,但subSequence應該提供相同的功能性。

-1

還有一個解決辦法這裏提到:

public static <T extends String, StringBuffer, StringBuilder> T substr3(
     T str) { 
    if (str.length() > 3) { 
     return (T) str.substring(0, 3); 
    } 
    return str; 
} 

,而不是&。

+1

聲明3類型參數;一個名爲'T',一個名爲'StringBuffer',一個名爲'StringBuilder'。只有第一個被使用,並且由於它的上限'String'是'final',它將總是'String'。 – 2014-10-17 13:40:55