泛型类及泛型方法:
package com.test.generate; import java.util.List; public class GenerateClass<T> { private T t; //泛型方法, 相当于Object, 该方法中的T和类中的T没有关系 public <T> T test1(T t){ return null; } //T类型测试,该方法的入参和返回值类型都必须是Number类型的子类 public <T extends Number> T test2(T t){ return null; } //普通方法,该方法的入参T的类型必须与new类时候传入的T相同 new GenerateClasss<String> public void test3(T t){ } //普通方法,该方法的入参返回值的类型必须与new类时候传入的T相同 new GenerateClasss<String> public T test4(){ return null; } //?问号通配符测试, 该方法的入参的List的泛型必须是Number的子类 public void test5(List<? extends Number> t){ } //该方法的入参的List的泛型可以是任意类型 public void test6(List<?> t){ } }
测试类:
package com.test.generate; import java.util.ArrayList; public class GenerateTest { public static void main(String[] args) { GenerateClass<String> g = new GenerateClass<String>(); //传入参的类型和返回值的类型必须相同 Integer res1 = g.test1(123); String res2 = g.test1("abc"); g.test2("abc"); //报错 Integer res3 = g.test2(123); //正常 //泛型类中的普通方法,参数类型为创建GenerateClass时候声明的泛型类型 g.test3(123); //报错 g.test3("abc"); //正常 //泛型类中的普通方法,返回值类型为创建GenerateClass时候声明的泛型类型 Integer res4 = g.test4(); //报错 String res5 = g.test4(); //正常 //使用<? extends Number>限制了入参的泛型类型 g.test5(new ArrayList<String>()); //报错 g.test5(new ArrayList<Integer>());//正常 //使用 ? 通配符接收所有类型 g.test6(new ArrayList<String>()); //正常 g.test6(new ArrayList<Integer>());//正常 } }
附上以上测试类在IDEA中的样式,更为直观地纠错