泛型

集合泛型:

List<String> list = new ArrayList<String>();
1\ 泛型只在编译阶段有效。为了减少类型转换异常。编译完的.class文件中没有泛型
2\泛型避免了向下转型。对于迭代器来说, Iterator后面的泛型必须带,如果不带,就是Object类型。
3\泛型的类型参数只能是类类型,不能是简单类型。
4\泛型在创建对象时才具体
5、类或者接口的泛型只能用在非静态方法中,不能用于静态方法,对于静态方法,只能使用泛型方法的形式。
继承或实现类中:
泛型不具体,子类也需要带泛型
泛型具体,子类可以不带泛型
特点:
1.菱形技术 :1.7jdk开始的 ,可以通过类型推断 推断出后面的类型。
ArrayList<String> list=new Arraylist<>()
2.可擦除技术:
在class文件中并没有泛型的存在。

泛型类

格式:

//泛型类
class A<K,V>{
	public void fun(K k,V v) {
		System.out.println(k.equals(v));
	}
}

泛型接口

interface I<K,V>{
	public void fun(K k,V v);
}

实现接口方法一:泛型不具体,子类也需要带泛型

class ZiI<K, V> implements I<K,V>{
	@Override
	public void fun(K k, V v) {
		// TODO Auto-generated method stub
		
	}
	
	/*public static void fun1(K k) {
	 * //Cannot make a static reference to the non-static type K
	 * 类或者接口的泛型只能用在非静态方法中,不能用于静态方法,对于静态方法,只能使用泛型方法的形式。
	}*/
	
	public static <T> void fun2(T t) {
		System.out.println(t);
	}
	
}

实现方法二: 泛型具体,子类可以不带泛型

class ZiI2 implements I<String,String>{

	@Override
	public void fun(String k, String v) {
		// TODO Auto-generated method stub
		
	}
}

泛型方法

泛型方法是在方法上声明了泛型,而不是使用了泛型的方法。
使用类或者接口的泛型这些方法不算泛型方法。

类或者接口的泛型只能用在非静态方法中,不能用于静态方法,对于静态方法,只能使用泛型方法的形式。
定义方式

class FanXingMethod{
	public <K> void fun(String s,K k) {
		
	}
}

泛型通配符

  • ?:任何数据类型
public void add(ArrayList<?> objList) {
		
}
  • ? extends E:只能是E类型或者E的子类
public void add(ArrayList<? extends E> eList) {
		
}
  • ? super E:只能是E类型或E的父类
public void add(ArrayList<? super E> eList) {
		
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值