【发布时间】:2026-02-04 17:30:01
【问题描述】:
我有这样的代码:
public class A<T extends String> {
T field;
List<T> fields;
public T getField() {
return field;
}
public List<T> getFields() {
return fields;
}
public static void test(){
A a = new A();
String s = a.getField();
List<String> ss = a.getFields();
}
}
为什么创建没有泛型类型的A getFiled 返回String 但getFileds 返回List<Object>?
我必须将A 定义为A<String> a = new A<>() 才能正常工作。
谢谢,
【问题讨论】:
-
通过不指定任何泛型类型,您声明您的类型使用站点不使用任何泛型信息。这意味着在
test()方法中,getFields()的有效签名是List getFields()(没有泛型),而不是您想象的List<String> getFields()。 -
@M.Prokhorov 那么为什么
field会返回为String? -
因为
T getField()的签名中没有泛型。一旦编译了该类型,就会有一个String getField()和一个由编译器生成的桥接方法,以支持将getField()与任意类型一起使用。这些都没有使用泛型。 -
getField会返回一个Object,为什么你一直说它返回一个String?我现在看到了我的错误。