A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天我们讲一下泛型在实际开发中的应用.在开发中我们一般在定义的时候不知道是什么类型,但是使用的时候会知道具体的类型.这时候我们就用泛型.泛型的应用大体分为三种,一种是定义在类上的泛型,一种是定义在方法上的泛型,一种是定义在接口上的泛型.下面我们分别介绍一下这三种用法.
首先,先来看第一种,也是最常见的一种,定义在类上的泛型.格式就是在类名后边加上一个<T>,只要在类上声明了.在类中就可以使用这种未知的类型.字母T可以是任意的字母或者字符串.
[AppleScript] 纯文本查看 复制代码
public class Demo<T> {
    private T t;

    public void setT(T t){
        this.t = t;
    }

    public T getT(){

        return t;
    }
}


创建对象使用的时候,要在类型后边声明称具体的类型:
[AppleScript] 纯文本查看 复制代码
    // 泛型类的使用 就是说什么时候确定泛型的具体类型
        // 创建对象的时候
        Demo<String> d = new Demo<>();
        d.setT("hello");
        String t = d.getT();
        System.out.println(t);

        Demo<Integer> d2 = new Demo<>();
        d2.setT(123);
        System.out.println(d2.getT());

接下来我们看一下如何在方法上声明泛型:
[AppleScript] 纯文本查看 复制代码
    /*
    定义一个带有泛型的方法
       定义一个方法  传一个类型的对象进来  输出它的运行时类也就是调用 getClass()
   */
    public <T> void show(T t){//T 代表泛型 代表未知的数据类型 未来传递的数据类型 传什么是什么
        System.out.println(t.getClass());
    }


使用的时候,出入的是什么类型,获取出来的就是什么类型.
[AppleScript] 纯文本查看 复制代码
        //使用带有泛型方法
        // 在调用方法的时候 确定了泛型的具体类型
        // 创建对象
        Demo d = new Demo();

        d.show("ahkla");

        d.show(12.3);


最后我们来看一下如何在接口上定义泛型和使用.先来看定义,跟在类上面定义是一样的:
[AppleScript] 纯文本查看 复制代码
public interface GenericInterface<E> {

    public abstract void add(E e);

    public abstract E get();
}


实现带有泛型的接口有两种方式.一种是在实现接口的时候就知道了要使用的类型.这时候,实现类中就不用再声明泛型:
[AppleScript] 纯文本查看 复制代码
public class GenericImp implements  GenericInterface<String>{

    @Override
    public void add(String s) {

    }

    @Override
    public String get() {
        return null;
    }
}

一种是在定义接口的实现类的时候,不能确定具体使用的是什么类型.这时候就要在实现类上也声明上泛型:
[AppleScript] 纯文本查看 复制代码
public class GenericImp2<E> implements GenericInterface<E>{

    @Override
    public void add(E e) {

    }

    @Override
    public E get() {
        return null;
    }
}

这种情况,就要在具体创建对象的时候,去确定具体使用的类型:
[AppleScript] 纯文本查看 复制代码
public static void main(String[] args) {

        GenericImp2<String> list = new GenericImp2<>();

        list.add("aaa");

        String s = list.get();


    }


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马