/**使用:
* 泛型类
* @param <T>
*/
class Test<T>{
private T data;
public Test(T data) {
this.data = data;
}
public Test() {
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
Test<Integer> integerTest = new Test<>(1);
Test<String> stringTest = new Test<>("String");
/**
* 泛型接口
* @param <T>
*/
interface TestInterface<T>{
void add(T t);
T getById(String id);
void update(T t);
}
/**
* 传入泛型实参时:
* 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator<T>
* 但是我们可以为T传入无数个实参,形成无数种类型的Generator接口。
* 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型
* class TestInterfaceImpl<Shop> implements TestInterface<Shop>
* @param <Shop>
*/
class TestInterfaceImpl<Shop> implements TestInterface<Shop>{
@Override
public void add(Shop shop) {
System.out.println("add===================");
}
@Override
public Shop getById(String id) {
System.out.println("getById=====================");
return null;
}
@Override
public void update(Shop shop) {
System.out.println("update=====================");
}
}
/** 常用方式
* 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
* class TestInterfaceImpl2<T> implements TestInterface<T>
* @param <T>
*/
class TestInterfaceImpl2<T> implements TestInterface<T>{
@Override
public void add(T t) {
}
@Override
public T getById(String id) {
return null;
}
@Override
public void update(T t) {
}
}
/**
* public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
* 只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
* <T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
* 与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
* @param t
* @param <T>
*/
public static <T> void test04(T t){
System.out.println("泛型方法1===============");
}
public static <T> T test05(List<T> t){
System.out.println("泛型方法2============");
return t.get(0);
}
//边界值
public static <T extends Number> void test06(T t){
System.out.println("泛型方法3===============");
}
public static <T extends Number> void test07(Test<T> t){
System.out.println("泛型方法4===============");
}
//通配符泛型
public static void test02(List<?> t){
System.out.println("泛型方法5=================");
}
public static void tets03(Test<? extends Number> list){
System.out.println("泛型方法6");
}
原文:https://www.cnblogs.com/longyao/p/11347250.html