java - 泛型类中泛型类型的访问方法

标签 java generics

在 Java 中,我构造了一个以 String 类型作为参数的泛型类。在类内部,我想访问 String 类型的方法。但是我得到一个错误无法解析符号——任何人都看到了这个问题:

public final class App
  public static void main(String[] args) {
    MyClass<String> myClass = new MyClass<String>("some string");
  }
}

public class MyClass<T> {
  public MyClass(T someString) {
    String someSubString = someString.substring(2,3);
  }
}

这是一个更新: 我实际上是在使用 String 作为占位符——我真正想做的是:

public final class App
  public static void main(String[] args) {
    MyClass<SpecificType2> myClass = new MyClass<SpecificType2>();
  }
}

public class GeneralType {
    public methodOfSpecificType() {...}
}

public class SpecificType1 extends GeneralType {
    @Override
    public methodOfSpecificType() {...}
}

public class SpecificType2 extends GeneralType {
    @Override
    public methodOfSpecificType() {...}
}

public class MyClass<T> {
  public MyClass(T specificType) {
    specificType.methodOfSpecificType();
  }
}

最佳答案

通过您的示例,编译器只知道 T 是一个 Objectsubstring(int,int) 不是属于 Object 类的方法,因此它不能保证 substring 会存在,因此失败编译。

如果你想在这里访问substring,那么泛型真的不适合这个解决方案。您应该只将 T 作为 String。只有在需要通用功能时才使用泛型。

额外阅读

关于java - 泛型类中泛型类型的访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555883/

相关文章:

java - 从文本文件读取时如何分割

java - 反射代码中的 IllegalArgumentException

java - azure应用程序服务上的spring boot应用程序在启动后立即停止

java - 为什么以下带有循环泛型的代码无法编译?

c# - IEqualityComparer 给出错误的结果

java - Android studio从html获取数据并仅过滤一些值以在textView上显示

java - 如何减少java程序的内存消耗

Java 编译器不同意泛型方法调用的安全性

可比较类型的 C# 泛型

java - 如何在 Java 中初始化泛型变量?