Java - 具有用于 3 种相似类型的有界类型的泛型方法 : String, StringBuilder、StringBuffer

标签 java generics

我知道这可能毫无意义,但这只是我的实验。有 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;
    }

它不会像这样编译,因为您可以根据需要使用任意多个接口(interface),但只能使用一个类作为有界类型。此方法适用于这 3 种类型:StringStringBuilderStringBuffer 但问题是:如何将这 3 种类型设置为绑定(bind)类型?

最佳答案

为什么不简单地扩展 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 应该提供相同的功能。

关于Java - 具有用于 3 种相似类型的有界类型的泛型方法 : String, StringBuilder、StringBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425807/

相关文章:

java - 如何正确使用二维数组存储多个字符串的split()结果?

java - 在 Linux 中从 Java 运行 C++ 可执行文件

c# - 实现通用接口(interface)时奇怪的 C# 行为

java - 为什么java泛型允许在HashMap<Integer,String>的get中传递 boolean 值

java - 委托(delegate)模式的目的是什么?

java - 对 xslt 使用不同的编码

Java AWT-EventQueue-0 错误

c# - 类使用泛型和泛型类型参数时如何获取正确的MethodInfo对象

java - Java 中的泛型

java - 泛型类型类定义