List<T> l = new ArrayList<T>();或者List<T> l = new LinkedList<T>();
List<T> list = new ArrayList<T>();
Java的泛型基本就是弱智的产物
List<T> l = new List<T>();这里面T的类型只有在运行的时候才能够确定,可能是int,string或者自己定义的类
泛型是1.5之后才有的,以前没有泛型的时候,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,你转换的时候对实际参数的类型是要知道的。如果你写错了类型,编译器一般不提示错误,等运行时候才会出错。 泛型的出现,就是你编译的时候就提示你出错。理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换上的操作: List<Apple> box = ...; Apple apple = box.get(0);上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样: List box = ...; Apple apple = (Apple) box.get(0);很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译器保证了这些类型转换的绝对无误。
用通配符?来表示未知类型。如List<?>就声明了List中包含的元素类型是未知的。
List<?> l = new ArrayList<?>();
package test;import java.util.ArrayList; import java.util.List;public class JVMTest<T> { /** * @param args */ public List<T> test(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ List<T> l = new ArrayList<T>(); return l;
泛型的出现,就是你编译的时候就提示你出错。理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换上的操作: List<Apple> box = ...;
Apple apple = box.get(0);上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样: List box = ...;
Apple apple = (Apple) box.get(0);很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译器保证了这些类型转换的绝对无误。
import java.util.List;public class JVMTest<T> { /**
* @param args
*/ public List<T> test(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
List<T> l = new ArrayList<T>();
return l;
}
}