java泛型详解

泛型是在jdk1.5提出的,本质是参数化接口。

泛型的语法<T> 其中T可以被任何其他字母替代,一般使用K,T,V,E等表示(约定)

一、一个简单的泛型类

public class Test<T> {
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    public static void main(String[] args) {
        Test<String> t1=new Test<>();//指定数据类型为String
        Test<Integer> t2=new Test<>();//指定数据类型为Integer
        Test t3=new Test(); //不指定数据类型则为Object

        t1.setValue("hello");
        System.out.println(t1.getValue());

        t2.setValue(10);
        System.out.println(t2.getValue());

        t3.setValue("world");  //Object可以接受任何数据类型的参数
        Object value = t3.getValue();//返回Object类型
        System.out.println(value);
    }
}

二、泛型类的派生类

        泛型类的派生类有一些注意事项:

           下面有一个父类Parent,是泛型类

public class Parent<E> {
    private E value;

    public E getValue() {
        return value;
    }

    public void setValue(E value) {
        this.value = value;
    }
}

      现在有一个子类ChildFirst想要继承该父类,要注意以下情况:

//第一种情况:
//这里子类也是泛型类,那么这里应该和父类使用同一个标识符
public class ChildFirst<T> extends Parent<E>{  //错误

//修改后:
public class ChildFirst<T> extends Parent<T>{  //正确

//第二种情况:
//这里子类不是泛型类,那么这里应该给出父类数据类型
public class ChildFirst extends Parent<E>{  //错误

//修改后:
public class ChildFirst extends Parent<String>{  //正确

//以上两种情况,父类也可以不给出类型标识,如:

public class ChildFirst<T> extends Parent{  //正确,但会给出警告,Parent默认接受Object类型

总结:因为在创建子类对象的时候需要先创建父类对象,所以如果第一种情况,我们就只能在创建子类对象的时候给出子类的具体数据类型,父类由于标识符不同,无法接受该类型,导致无法创建父类对象,所以报错。第二种情况类似,无法确定父类的具体数据类型。所以要么继承的时候显示给出父类的数据类型,要么和子类使用同一个标识符,通过创建子类对象的时候传递具体的数据类型,或者不写泛型(默认为Object)。

三、泛型方法

        泛型类是在实例化对象时指定参数类型,而泛型方法时在调用方法时才指定参数类型。

要注意区分:

 //这并不是泛型方法,而是泛型类中的一个普通方法,他的返回值类型是在实例化泛型类的时候指定的
 public T getValue() {
        return value;
    }

一个简单的泛型方法:

//使用<T>将泛型声明在修饰符合返回值中间,在调用该方法时将传入的数据类型作为泛型方法的类型
 public <T> void method2(T t){
        System.out.println(t);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值