美文网首页
基础:泛型

基础:泛型

作者: Bitson | 来源:发表于2019-04-22 15:44 被阅读0次
  • 泛型的参数必须是类类型,不能是简单类型,如int是不行的,要Integer
  • 泛型饿类型个数可以是多个
  • 可以使用extends关键字限制泛型的类型
  • 可以通配符限制泛型的类型

泛型例子

class Mother<T1> {

    T1 t1;

    void setT1(T1 t1) {

        this.t1 = t1;

    }

    T1 getT1() {

        return this.t1;

    }

}

泛型继承

class Son<T1, T2> extends Mother<T1> {

    T2 t2;

    void setT2(T2 t2) {

        this.t2 = t2;

    }

    T2 getT2() {

        return this.t2;

    }

}

继承时不指定夫类类型的话,T1会自动变成Object类型

class Mother2<T1> {
    T1 t1;

    void setT1(T1 t1) {
        this.t1 = t1;
    }

    T1 getT1() {
        return this.t1;
    }
}

class Son<T2> extends Mother2 {

    T2 t2;

    void setT2(T2 t2) {

        this.t2 = t2;

    }

    T2 getT2() {

        return this.t2;

    }

}

// 测试代码
Son2<Integer> son2 = new Son2<>(); // 在创建son2引用的时候,Mother2中的T1自动变成Object类型
son2.setT1("some"); // 可以接收字符串“some”,应为String也是Object的子类
son2.setT2(123);
System.out.println(son2.getT1());
System.out.println(son2.getT2());

限制泛型可用类型

class Limit {

    @Override

    public String toString() {

        return "this is bitson";

    }

}

class SubLimit extends Limit {}

class Mother<T1 extends Limit> { // 这里限制类类型T1必须要是Limit类的子类
    T1 t1;

    void setT1(T1 t1) {
        this.t1 = t1;
    }

    T1 getT1() {
        return this.t1;
    }
}

class Son<T1 extends Limit, T2> extends Mother<T1> { 
    //这里继承Mother的时候必须指定T1是Limit类的子类
    T2 t2;

    void setT2(T2 t2) {
        this.t2 = t2;
    }

    T2 getT2() {
        return this.t2;
    }
}

// 测试方法中运行如下代码
Son<SubLimit, Integer> son = new Son<>(); // son引用的第一个参数必须是继承类Limit的子类
son.setT1(new SubLimit());
System.out.println(son.getT1());

使用类型通配符:“?”

class Limit {
    @Override
    public String toString() {
        return "this is bitson";
    }
}

class SubLimit extends Limit {}

class SubLimit2 extends Limit {}

class Mother<T1 extends Limit> {
    T1 t1;

    void setT1(T1 t1) {
        this.t1 = t1;
    }

    T1 getT1() {
        return this.t1;
    }
}

class Son<T1 extends Limit, T2> extends Mother<T1> {
    T2 t2;

    void setT2(T2 t2) {
        this.t2 = t2;
    }

    T2 getT2() {
        return this.t2;
    }
}

// 测试代码
Son<? extends Limit, Integer> son = null; // 使用类型通配符的话,可以引用Son<SubLimit, Integer>类型或者是Son<SubLimit2, Integer>()类型的实例
son = new Son<SubLimit, Integer>(); 
son = new Son<SubLimit2, Integer>();

相关文章

  • typescript入门-泛型

    基础定义 泛型接口 泛型类 泛型约束 使用类类型

  • 泛型基础二

    如果不明白为什么要使用泛型,使用泛型的好处,以及泛型类,泛型接口,泛型方法等知识,请移步泛型基础一 通配符 上界通...

  • Java 泛型

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 为什么会有泛型? 泛型类 泛型方法 泛...

  • spring 泛型处理

    java 泛型基础 泛型类型:泛型类型是在类型上参数化的泛型类或接口 泛型使用场景编译时前类型检查。定义为 Col...

  • Java 泛型

    本文只是做为泛型的入门和基础的泛型的了解。 什么是泛型?泛型(generices)是JDK5引入的新特性,这个特性...

  • Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原...

  • 一文带你认识Java泛型基础

    Java泛型基础 1. 认识泛型 泛型是在JDK1.5之后增加的新功能. 泛型可以解决数据的安全性问题, 主要的原...

  • 基础: 泛型

    引言 java泛型是JDK1.5中引入的一个新特性,泛型提供了编译时的类型检测机制,该机制允许程序员在编译时检测到...

  • 基础:泛型

    泛型的参数必须是类类型,不能是简单类型,如int是不行的,要Integer 泛型饿类型个数可以是多个 可以使用ex...

  • 泛型基础

    1.为什么我们需要用泛型 A.适用于多种数据类型执行相同的代码,比如下面俩个方法,如果用泛型就能整合成一个方法 B...

网友评论

      本文标题:基础:泛型

      本文链接:https://www.haomeiwen.com/subject/yqzygqtx.html