此处仅通过一示例说明泛型类与泛型方法使用上的区别,非泛型详细说明。主要是泛型类、泛型方法、普通方法代码结构上的区别,不当处欢迎大家指正。
public class GeneralTest<F> { public <E> E getFirst(E... c) {//A.【泛型类】中的【泛型方法】 E e = c[0]; return e; } public static <T> T getMiddle(T... a) {//B.【泛型类】中的静态【泛型方法】 return a[a.length / 2]; } public F getLast(F... b) {//C.【泛型类】中的【标准方法】 return b[b.length - 1]; } // public G getElse(G... b) {//D.【泛型类】中变量、返回值、方法参数必须是类声明时包含的类型(T、F...) // return b[b.length - 1]; // } public String getSth(String... b) {//E.【泛型类】中的【普通方法】 return b[b.length - 1]; } public Object getSth(Object o) {//F.【泛型类】中的【普通方法】 return o; } public static void main(String[] args) { Integer[] intarry = { 1, 2, 3, 4, 5, 6 }; String[] strarry = { "a", "b", "c", "d","e" }; GeneralTest<Integer> arrayAlg = new GeneralTest<Integer>();//泛型类声明参数类型为Integer //getFirst为泛型方法,因此可接受任意类型的参数 Integer ii = arrayAlg.getFirst(intarry);//此处传入Integer类型参数 System.out.println(ii); String ss = arrayAlg.getFirst(strarry);//此处传入String类型参数 System.out.println(ss); //getMiddle为静态泛型方法,用法同getFirst,因此可接受任意类型的参数 ii = getMiddle(intarry); System.out.println(ii); ss = getMiddle(strarry); System.out.println(ss); //getLast为泛型类的标准方法(用词可能不恰当,望包涵、指正),仅接受ArrayAlg实例化时指定的参数类型 ii = arrayAlg.getLast(intarry); System.out.println(ii); // ss = arrayAlg.getLast(strarry);//getLast为泛型类声明的方法,在对象实例化时已经确定了仅接受Integer类型参数 // System.out.println(ss); ss = arrayAlg.getSth(strarry);//泛型类中的普通方法 System.out.println(ss); } }
小结:
泛型类中可以有
A.标准的方法(方法参数类型与类声明一致),且方法调用时,参数类型在对象实例化时指定,不可接受其它类型的参数。
B.泛型方法(方法参数由该方法控制,不受类声明参数类型影响)
C.指定返回类型及参数类型的普通方法
另外,泛型方法不是一定要在泛型类中定义,普通类也可定义泛型方法。