我还在学习泛型,并有一个问题.假设你有这个通用类:
public class Test<T> {
public static void main (String[] args) {
Test t1 = new Test();
Test<String> t2 = new Test<String>();
Test t3 = new Test<String>();
}
}
Run Code Online (Sandbox Code Playgroud)
所有的陈述都汇编了,但我真的不知道是什么让它们与众不同.任何人都可以对这三个陈述给我一个简短的解释.
Test t1 = new Test();
Run Code Online (Sandbox Code Playgroud)
在这里,您使用的是Raw类型.即,没有Type argument为你的generic class 传递.
编译器应该在这里给你一个警告
测试是原始类型.应参数化对泛型类型Test的引用
Test<String> t2 = new Test<String>();
Run Code Online (Sandbox Code Playgroud)
在这里你使用泛型.将String作为a传递type argument给你的generic class.
Test t3 = new Test<String>();
Run Code Online (Sandbox Code Playgroud)
编译器也应该在这里给你一个警告:
- 测试是原始类型.应参数化对泛型类型Test的引用
与第一种情况相同,但在调用构造函数时使用的是参数化类型.
还有另一个类可以在+ java 7版本中正常工作.
Test<String> t4 = new Test<>();
Run Code Online (Sandbox Code Playgroud)
如果由于Type Inference使用+ java 7,则此处没有编译器警告
在这种情况下,由于引入了type inference泛型类型,因此您不需要在构造函数调用期间提供泛型类型.