泛型类及泛型方法:
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中的样式,更为直观地纠错