Java泛型

概述

①Java 泛型(generics)提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。避免在运行时强制类型转换而出现 ClassCastException。
②泛型好处:
Ⅰ.类型安全。类型错误现在在编译期间就被捕获到了,而不是在运行时当作java.lang.ClassCastException展示出来,将类型检查从运行时挪到编译时有助于开发者更容易找到错误,并提高程序的可靠性。Ⅱ**.消除了代码中许多的强制类型转换**,增强了代码的可读性。Ⅲ.为较大的优化带来了可能。

泛型的使用

泛型接口

//定义接口时指定了一个类型形参,该形参名为E
public interface List<E> extends Collection<E> {
	//在该接口里,E可以作为类型使用
	public E get(int index) {}
	public void add(E e) {}
}
//定义类时指定了一个类型形参,该形参名为E
public class ArrayList<E> extends AbstractList<E> implements List<E> {
	//在该类里,E可以作为类型使用
	public void set(E e) {
	.......................
		}
}

允许在定义接口、类时声明类型形参,类型形参在整个接口、类体内可当成类型使用,几乎所有可使用普通类型的地方都可以使用这种类型形参。

泛型类

定义一个容器类,存放键值对key-value,键值对的类型不确定,可以使用泛型来定义,分别指定为K和V。

public class Container<K, V> {
	private K key;
	private V value;
	public Container(K k, V v) {
		key = k;
		value = v;
	}
	public K getkey() {
		return key;
	}
	public V getValue() {
		return value;
	}
	public void setKey() {
		this.key = key;
	}
	public void setValue() {
		this.value = value;
	}
}

泛型类派生子类

使用带泛型声明的接口、父类派生子类时不能再包含类型形参,需要传入具体的类型

错误的方式:
public class A extends Container<K, V>{}
正确的方式:
public class A extends Container<Integer, String>{}
也可以不指定具体的类型
public class A extends Container{}
此时系统会把K,V形参当成Object类型处理。

泛型方法

在这里插入图片描述

①泛型方法就是在声明方法时定义一个或多个类型形参。
方法声明中定义的形参只能在该方法里使用,而接口、类声明中定义的类型形参则可以在整个接口、类中使用
③根据传入的实际对象,编译器就会判断出类型形参T所代表
的实际类型。

类型通配符

类型通配符是一个问号(?),将一个问号作为类型实参传给List集合,写作: List<?> (意思是元素类型未知的List)。这个问号(?)被成为通配符,它的元素类型可以匹配任何类型。
在这里插入图片描述

类型擦除

在这里插入图片描述

不管为泛型的类型形参传入哪一种类型实参,对于Java来说,它们依然被当成同一类处理在内存中也只占用一块内存空间

从Java泛型这一概念提出的目的来看,其只是作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。

在静态方法、静态初始化块或者静态变量的声明和初始化中不允许使用类型形参。

由于系统中并不会真正生成泛型类,所以instanceof运算符后不能使用泛型类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值