1.0、Java泛型 - 什么是泛型类 ?

1.0、Java泛型 - 什么是泛型类 ?

背景:

        Java推出泛型之前,程序猿可以构建一个元素类型为 Object 的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序猿明确知道存储每个元素的数据类型,否则很容易引发 ClassCastException 的异常;

泛型的概念:

         Java 泛型(generics)是就 JDK5 中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许我们在编译时检测到非法的类型数据结构

        泛型的本质就是参数化类型,也就是所操作的数据类型被指定一个参数;

泛型的好处:

类型安全;

消除了强制类型的转换 ;

我们来创建一个泛型类  Test.java 如下所示 ->

public class Test<T> {

    private T key;

    public Test(T key) {
        this.key = key;
    }

    public void setKey(T key) {
        this.key = key;
    }

    public T getKey(T key) {
        return key;
    }
}

        当我们初始化 Test类 的时候,可以指定一个类型给 T ,例如 Test<String> t = new Test<String>("初始化key"); 这样编译器会帮助我们检查key的类型是否正确;

        当然也可以不指定类型,例如 Test t = new Test("初始化key"); 不指定类型时 Java 会默认给 T  指定为 Object 类型;

        注意:泛型类不支持基本数据类型(比如int double float ... 但是支持 Integet Double Float... ),因为泛型的原理大致上就是先将 T 转化为 Object 类型然后会在某个时刻将 Object 再转化为我们指定的数据类型;
        但是由于基本数据类型不继承于 Object 类型所以无法进行转换;

        同一泛型类型,根据不同数据类型创建的对象,本质上是同一类型

泛型的继承:

情况1:

        如果继承泛型类的子类也是泛型类的话,注意 -> 子类泛型标识 与 父类泛型标识 需要保持一致;

        其实也很好理解,当我们初始化子类时,会先初始化父类,如果泛型标识不一致,则父类就无法得到指定的类型;如下所示 ->

Parent.java父类- >

public class Parent<E> {

	private E value;
	
	public E getValue() {
		return this.value;
	}
	
	public void setVlaue(E value) {
		this.value = value;
	}
	
}

Child.java 子类->

public class Child<T> extends Parent<T> {
	
	private T value;
	
	public void setValue(T value) {
		this.value = super.getValue();
	}

}

子类可以扩展泛型,子类中的泛型标识至少有一个与父类中的泛型标识相同即可;

 情况2:

如果继承泛型的子类不是泛型类的话,需要直接给父类指定一个明确的类型,因为子类不是泛型类所以初始化的时候不会给指定类型,父类自然就没办法得到数据类型,所以如下所示 ->

public class Chlid2 extends Parent<String> {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值