为什么以下编译?我收到警告告诉我
getTest()返回一个原始类型,因此getTestIntegers()被删除
但我不明白为什么,List<String> tester = Test.getTest().getTestIntegers()
不是通用的。我原以为public class Scratchpad {
public static void main(String[] args) {
new Scratchpad().run();
}
private void run() {
List<String> tester = Test.getTest().getTestIntegers();
}
private static class Test<T> {
public static Test getTest() {
return new Test();
}
public List<Integer> getTestIntegers() {
return Collections.singletonList(1);
}
}
}
会产生编译错误
{{1}}
答案 0 :(得分:2)
正如已经指出的那样,getTest
返回原始类型。该方法的正确实现如下所示:
public static <T> Test<T> getTest() {
return new Test<>();
}
请注意,您需要为静态方法指定一个通用参数 - 它可以是任何内容,因为不与类签名中的T
相同(但它通常很常见)使用相同的名称,如果它在同一个地方使用。)
那么这取决于编译器是否可以推断出正确的类型,有时可能需要你的&#34; help&#34;,例如。
List<String> tester = Test.<String>getTest().getTestIntegers();
(如果那里有必要,我没有尝试过,但这看起来如何)