摘要:定义具有一个或多个类型变量的类,称之为泛型类。泛型类的继承创建对象的两种方式错误方式错误原因继承了泛型类,但并不是泛型类,所以不能这样创建对象。同样是泛型类,它的父类也是泛型类,它传递的是常量。
泛型类
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
BB b = new BB()
错误方式
BB
错误原因:BB 继承了泛型类 B,但 BB 并不是泛型类,所以不能这样创建对象。
public class C{} class CC extends C {} class CCC extends C {}
创建CC对象
C
C
泛型引用和创建,两端给出的泛型变量必须相同(等号前后的泛型类型应该保持一致),否则会报错。
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
摘要:泛型之上界下界通配符本教程是为编写的。这是在使用泛型编程时一个常见的误解,也是一个需要学习的重要概念。通配符使用指南学习使用泛型编程时,更令人困惑的一个方面是确定何时使用上限有界通配符以及何时使用下限有界通配符。 Java 泛型之上界下界通配符 本Java教程是为JDK 8编写的。本页描述的示例和实践没有利用后续版本中引入的改进。 泛型,继承和子类 如你所知,只要类型兼容,就可以将一种...
摘要:简述大家在平时的工作学习中肯定会见过不少如下的语句我们都知道上面的代码时关于泛型的那么这两个不同的写法都有什么区别呢首先说到的泛型我们必须要提到的是泛型的类型擦除机制中的泛型基本上都是在编译器这个层次来实现的在生成的字节代码中是不包含泛型中 简述 大家在平时的工作学习中, 肯定会见过不少如下的语句: List 就表示了泛型参数是某个类型, 只不过我们并不知道它的具体类型时什么.List...
阅读 2456·2021-11-25 09:43
阅读 2476·2021-11-16 11:50
阅读 3218·2021-10-09 09:44
阅读 3133·2021-09-26 09:55
阅读 2792·2019-08-30 13:50
阅读 974·2019-08-29 13:24
阅读 2032·2019-08-26 11:44
阅读 2747·2019-08-26 11:37