首页  

java泛型     所属分类 java 浏览量 106
Java 泛型 generics
泛型类 泛型接口 泛型方法

编译时检查类型 ,所有的强制转换都是自动和隐式的 
安全 简洁 可读性好
避免强制类型转换 ClassCastException

泛型通配符
?  不确定的类型
T  type 表示具体的一个java类型
K V   key value  
E  element 

无边界通配符 List
上边界限定通配符   泛型中的参数必须是 E 或者 E 的子类
下边界通配符        泛型中的参数必须是所指定的类型E,或者是此类型的父类型,直至 Object

Fruit[]与Apple[] 兼容
List< Fruit > 与 List< Apple > 不兼容

// 
List list = new ArrayList<>();
list.add(666);
        



public class Holder<T> {	
	
	private final T data;
	
	public Holder(T data){
		this.data = data;
	}
	
	public T getData(){
		return data;
	}
}

Holder<String> holder = new Holder<String>("hello");
System.out.println(holder.getData());
System.out.println(holder.getClass());

		
Holder<Integer> holder2 = new Holder<>(3);
System.out.println(holder2.getData());	
System.out.println(holder2.getClass());



    // 泛型实例方法
    private <T extends Comparable> T max(T t1, T t2) {
        return t1.compareTo(t2) >= 0 ? t1 : t2;
    }
    
    // 泛型静态方法
    private static <T extends Comparable> T max2(T t1, T t2) {
        return t1.compareTo(t2) >= 0 ? t1 : t2;
    }



	  private static <T> T convert(Object a) {
	        return (T) a;
	  }


        List<String> list = new ArrayList<String>();
        list.add("hello");
 
        //普通转换
        ArrayList<String> list1 = (ArrayList<String>) list;
 
        //静态泛型转换
        ArrayList<String> list2 = convert(list);
        
        // java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
        // String str = convert(list);

    
 

类型擦除

泛型的限制
不支持 Pair<double> ,只支持Pair<Double>

运行时类型只能获取到原始类型 因为类型擦除了

不能创建参数化类型的数组
// 不能创建参数化类型的数组
// Holder<String>[] holders = new Holder<String>[3] ;

不能实例化类型变量
// 不能实例化类型变量
// this.data = new T();

使用泛型接口时,避免重复实现同一个接口

interface Swim<T> {}
class Duck implements Swim<Duck> {}

class UglyDuck extends Duck implements Swim<UglyDuck> {}

可以消除对checked异常的检查
public static <T extends Throwable>void throwAs(Throwable e) throws T { throw (T) e; }




定义API返回值,使用泛型


Java泛型常见面试题

使用泛型的好处
什么是类型擦除
泛型中的限定通配符和非限定通配符
泛型通配符与上下界
List<? extends T>和List <? super T>之间的区别


  

 java泛型技巧 


泛型例子代码
https://gitee.com/dyyx/hellocode/tree/master/src/dyyx/generic

上一篇     下一篇
springboot中使用 JWT

java访问修饰符

java内部类

Linux Load 查看及计算

数据仓库术语

spring-session-jdbc使用数据库存储共享session