资讯专栏INFORMATION COLUMN

泛型之泛型类

caoym / 260人阅读

摘要:定义具有一个或多个类型变量的类,称之为泛型类。泛型类的继承创建对象的两种方式错误方式错误原因继承了泛型类,但并不是泛型类,所以不能这样创建对象。同样是泛型类,它的父类也是泛型类,它传递的是常量。

泛型类
public class A {
    //在成员变量上使用泛型
    private T t;
    
    public A() {}
    
    //构造参数类型上使用泛型
    public A(T t) {
       this.t = t;
    }
    
    //方法返回值上使用泛型
    public T getT() {
        return t;
    }
    
    //方法的参数上使用泛型
    //这是泛型类的方法,而不是泛型方法
    public void setT(T t) {
        this.t = t;
    }
    
    //方法的返回值和参数类型上使用泛型
    public T foo(T t) {
        return t;
    }
    
    public void foo2() {
        //T t = ....; //局部变量的引用类型上使用泛型
        //new T(); //不可以这样使用
    }
    
    public void foo3() {
        //在创建泛型类对象时,即为类型变量赋值,这里将T赋值为String类型
        A a = new A();
        //将T赋值为Integer类型
        A a1 = new A();
    }
}

A是一个泛型类,T它是一个变量,需要赋类型值,如果有多个类型变量,就用逗号分隔,比如 Jdk 的 Map 接口:interface Map {}
定义:具有一个或多个类型变量的类,称之为泛型类
泛型类是一个存在类型变量的类,存在可变的因素,所以说是一个不完整的类。那么当子类去继承的时候,把里面的类型变量赋予了类型,那么这个类就完整了,就可以使用了。

泛型类的继承
public class B {}

class BB extends B {}

创建BB对象的两种方式

B b = new BB()

BB b = new BB()

错误方式

BB bb = new BB()

错误原因:BB 继承了泛型类 B,但 BB 并不是泛型类,所以不能这样创建对象。

public class C {}

class CC extends C {}
class CCC extends C {}

创建CC对象

C c = new CC()

C c = new CC()

泛型引用和创建,两端给出的泛型变量必须相同(等号前后的泛型类型应该保持一致),否则会报错。
CC是泛型类,它的父类也泛型类,它可以给父类传递类型常量,也可以传递变量,这里传递的是变量。
CCC同样是泛型类,它的父类也是泛型类,它传递的是常量。

泛型类的子类重写父类方法
public class D {
    private T bean;
    
    public void setBean(T bean) {
        this.bean = bean;
    }
}

class DD extends D {
    /**
     * 子类重写父类方法,参数类型必须是E,因为子类在定义
     * 已经把类型E赋给了父类。
     */
    @Override
    public void setBean(E o) {
        //TODO
    }
}
class DDD extends D {
    //子类定义时已经把类型String赋给了父类,所以方法重写时类型是String
    public void setBean(String str) {
        //TODO
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73410.html

相关文章

  • 泛型之泛型方法

    摘要:泛型方法显式赋值张三李四王五隐式赋值,常用此方式,可以不指定张三李四王五泛型方法不受类的限制,也就是说,即使方法所在的类不是泛型类,也可以定义泛型方法在泛型类中定义的方法,也不一定是泛型方法,就看你如何定义了。泛型类中可以定义泛型方法。 public class F { //泛型方法 public static T getT(T[] array...

    sydMobile 评论0 收藏0
  • 型之通配符

    摘要:调用相当于通过使用通配符,可以传递任何类型的对象,但也是有缺点的。使用通配符,赋值传值的时候方便了,但是对泛型类中参数为泛型的方法起到了副作用。结论当使用父界限定通配符时,泛型类中返回值为泛型的方法不能使用。 数组 VS List 第一回合数组类型为Object,可以存储任意类型的对象,List集合同样可以做到 Object[] obj = new Object[1]; List li...

    PingCAP 评论0 收藏0
  • Java 型之上界下界通配符

    摘要:泛型之上界下界通配符本教程是为编写的。这是在使用泛型编程时一个常见的误解,也是一个需要学习的重要概念。通配符使用指南学习使用泛型编程时,更令人困惑的一个方面是确定何时使用上限有界通配符以及何时使用下限有界通配符。 Java 泛型之上界下界通配符 本Java教程是为JDK 8编写的。本页描述的示例和实践没有利用后续版本中引入的改进。 泛型,继承和子类 如你所知,只要类型兼容,就可以将一种...

    shiyang6017 评论0 收藏0
  • Java系列之泛

    摘要:总结泛型的类型必须是引用类型,不能是基本类型,泛型的个数可以有多个,可以使用对创建对象时的泛型类型以及方法参数类型进行限制,如使用关键字和对泛型的具体类型进行向下限制或向上限制,最后一点,可以声明泛型数组,但是不能创建泛型数组的实例。 自从 JDK 1.5 提供了泛型概念,泛型使得开发者可以定义较为安全的类型,不至于强制类型转化时出现类型转化异常,在没有反省之前,可以通过 Object...

    MadPecker 评论0 收藏0
  • Java 之泛型通配符 ? extends T 与 ? super T 解惑

    摘要:简述大家在平时的工作学习中肯定会见过不少如下的语句我们都知道上面的代码时关于泛型的那么这两个不同的写法都有什么区别呢首先说到的泛型我们必须要提到的是泛型的类型擦除机制中的泛型基本上都是在编译器这个层次来实现的在生成的字节代码中是不包含泛型中 简述 大家在平时的工作学习中, 肯定会见过不少如下的语句: List 就表示了泛型参数是某个类型, 只不过我们并不知道它的具体类型时什么.List...

    woshicixide 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<