package test;
import java.util.ArrayList;
public class project1 {
public static void main(String []args) {
Integer[] integers= {1,2,3,4,5};
String[] strings= {"abc","cdf","ddf","fdfd","rer","dsf"};
print(integers);
print(strings);
project1.<Integer>print(integers);
project1.<String>print(strings);
}
public static <E> void print(E[] list) {
for(E i: list) {
System.out.print(i+" ");
}
System.out.println();
}
}
为了声明泛型方法,将泛型类型<E>置于方法头中关键字static之后,例 :public static <E> void print(E[] list)
为了调用泛型方法,需要将实际类型放在尖括号内作为方法名的前缀。例project1.<Integer>print(integers);
也可以简单调用 print(integers);在这种情况下,实际类型没有明确指定,编译器自动发现实际类型。
可以将泛型指定为另一种 类型的子类型。这样的泛型 称为受限的。
package test;
import java.util.ArrayList;
public class project1 {
public static void main(String []args) {
Rectangle rectangle=new Rectangle(2,2);
Circle circle=new Circle(2);
System.out.println("same area?"+equalArea(rectangle,circle));
}
public static <E extends GeometricObject> boolean equalArea(E object1,E object2) {
return object1.getArea()==object2.getArea();
}
}
其中GeometricObject为Rectangle和Circle的父类。受限的泛型类型<E extends GeometricObject>将E指定为GeometricObject的泛型子类型。必须传递两个GeometricObject的实例来调用equalArea()。
非受限泛型类型<E>相当于<E extends Object>
为了定义一个类为泛型类,需要将泛型类型放在类名之后,例GeometricStack<E>.
为了定义一个方法为泛型类型,需要将泛型类型放在方法返回类型之前,例<E> void max(E o1,E,o2)