真的很简单。这是J2SE 5中引入的新功能。在类名称后指定尖括号表示您正在创建一个临时数据类型,该数据类型可以容纳任何类型的数据。
例:
class A<T>{
T obj;
void add(T obj){
this.obj=obj;
}
T get(){
return obj;
}
}
public class generics {
static<E> void print(E[] elements){
for(E element:elements){
System.out.println(element);
}
}
public static void main(String[] args) {
A<String> obj=new A<String>();
A<Integer> obj1=new A<Integer>();
obj.add("hello");
obj1.add(6);
System.out.println(obj.get());
System.out.println(obj1.get());
Integer[] arr={1,3,5,7};
print(arr);
}
}
代替<T>
,您实际上可以编写任何东西,并且将以相同的方式工作。尝试<ABC>
用代替<T>
。
这只是为了方便:
<T>
被称为任何类型
<E>
作为元素类型
<N>
作为数字类型
<V>
作为价值
<K>
作为关键
但是您可以随便命名,这并不重要。
此外,Integer
,String
,Boolean
等都是包装类的Java,帮助在编译过程中的类型检查。例如,在上面的代码中,obj
类型是String
,因此您不能向其添加任何其他类型(try obj.add(1)
,它将引发错误)。同样,obj1
是的Integer
类型,您不能向其添加任何其他类型(try obj1.add("hello")
,错误在那里)。
T createObject
认为是内部池或PoolFactory?this.freeObjects = ...
应该在哪里?那是一个单独的例子吗?在那里存放是非法的。它必须在方法内部。