2014-10-17 82 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