我知道它根本没有意义,但这只是我的实验。有3种类型(据我所知)支持方法substring()
。我不想制作这样的通用方法:
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种类型设置为绑定类型?
答案 0 :(得分:13)
为什么不简单地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 :(得分:-1)
这里也提到了一个解决方案:
public static <T extends String, StringBuffer, StringBuilder> T substr3(
T str) {
if (str.length() > 3) {
return (T) str.substring(0, 3);
}
return str;
}
,而不是&amp;。