在 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
是一个 Object
。 substring(int,int)
不是属于 Object
类的方法,因此它不能保证 substring
会存在,因此失败编译。
如果你想在这里访问substring
,那么泛型真的不适合这个解决方案。您应该只将 T
作为 String
。只有在需要通用功能时才使用泛型。
额外阅读
- 阅读本指南以获取 Why to use Generics .
关于java - 泛型类中泛型类型的访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555883/