`
hacksin
  • 浏览: 9932 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 泛型 通配符理解

    博客分类:
  • Java
阅读更多
泛型,通配符
(1)
传参时要求类型为B,那么可以传入B或B的子类型
获取返回值时,如果返回的类型是B,那么接收他的类型可以是B或者B的父类型。
(2)
<? extends T>表示其定义的泛型范围为T及其子类型
<? super T>表示其定义的泛型范围为T及其父类型
(3)
object是所有类的父类,NULL代表所有类型
(4)举例:
设:B extends A, C extends B
List<?  extends B> list = new ArrayList<B>();//表示list存放的是B或者B的子类。
//list.add(new A());//由于定义了list存放的是B或B的子类,所以不能传入其父类A
//list.add(new B());  //由于定义的范围是B或B的子类,但没有明确到底是B还是子类C还是其他新定义的子类,所以编译器无法比较传入的类与定义的类的父子关系,故报错。
//list.add(new C()): //理由同上
//list.add(new Object()); //所有类的父类必然传不进去了
list.add(null); //null代表所有类型,故编译器允许其传入。
A a = list.get(0); //子类可以赋值给父类
B b = list.get(0); //子类可以赋值给父类
//C c = list.get(0); //由于list里面可以存放B类型,所以父类是无法赋值给子类的。
Object o = list.get(0); //子类可以赋值给父类

List<? super B> list = new ArrayList<B>();//表示list存放的是B或B的父类
//list.add(new A()); //由于A是B的父类,单list只接收B或B的子类,故报错
list.add(new B()); //成功
list.add(new c());//成功
list.add(null);//成功
//list.add(new Object());//Object是所有类的父类,必然失败了
//A a = list.get(0); //由于list存放的是B或B的父类,有可能是Object,因父类是无法赋值给子类,故报错
//B b = list.get(0); //同样的道理,如果list存放Object类型就报错了
//C c = list.get(0);//依然是父类无法给子类赋值
Object o = list.get(0);//成功,Object没有父类了

代码:

public void test()
{
ArrayList<? extends B> list = new ArrayList<B>();
A a = new A();
B b = new B();
C c = new C();
Object o = new Object();
// list.add(o);
// list.add(a);
// list.add(b);
// list.add(c);
list.add(null);
o=list.get(0);
a=list.get(0);
b=list.get(0);
// c=list.get(0);
}

public void test()
{
ArrayList<? super B> list = new ArrayList<B>();
A a = new A();
B b = new B();
C c = new C();
Object o = new Object();
// list.add(o);
// list.add(a);
list.add(b);
list.add(c);
list.add(null);
o=list.get(0);
// a=list.get(0);
// b=list.get(0);
// c=list.get(0);

}
分享到:
评论

相关推荐

    一看就懂 详解JAVA泛型通配符T,E,K,V区别

    泛型从字面上理解,是指一个类、接口或方法支持多种类型,使之广泛化、一般化和更加通用。通配符只有在修饰一个变量时会用到,使用它可方便地引用包含了多种类型的泛型;下面我们来深入了解一下吧

    Java语言 泛型讲解案例代码 (泛型类、泛型接口、泛型方法、无界及上下限通配符、泛型对协变和逆变的支持、类型擦除 ...)

    学习和理解Java泛型的基本概念和语法; 实际项目中需要使用泛型来增加类型安全性和重用性的开发任务。 目标: 本代码资源的目标是帮助读者理解泛型的用法和优势,并通过实际的示例代码加深对泛型的掌握。读者可以...

    Java泛型初学者之上、下界通配符的深入理解

    主要给大家介绍了关于Java泛型初学者之上、下界通配符的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者实用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    深入理解Kotlin的泛型系统

    在 Java 中,只要是有类型的 API 元素,都可以泛型化,也就是泛型类、泛型接口、泛型方法和泛型属性,泛型类和泛型接口可以统称为泛型类型。其中最重要的是泛型类型和泛型方法,Kotlin 泛型系统继承了 Java 泛型系统...

    新JEP将简化Java类型变异

    这个新的JEP Candidate可能会在Java 10中推出,提供了在定义的泛型类型中指定目标对象默认变异的方法,而不是在泛型类型实例化时通过通配符指定。这个新方案并不会代替通配符,而是减少对通配符的需求。  类型变异...

    Java开发详解.zip

    031002_【第10章:泛型】_通配符笔记.pdf 031003_【第10章:泛型】_泛型的其他应用笔记.pdf 031004_〖第10章:泛型〗_实例讲解—泛型操作范例笔记.pdf 031101_【第11章:Java常用类库】_StringBuffer笔记.pdf 031102...

    疯狂JAVA讲义

    8.4.2 泛型方法和类型通配符的区别 306 8.4.3 设定通配符的下限 307 8.4.4 泛型方法与方法重载 309 8.5 擦除和转换 310 8.6 泛型与数组 311 8.7 本章小结 313 第9章 与运行环境交互 314 9.1 与用户互动 315 ...

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java 高级特性.doc

    通配符引用之前调用,否则就与java 5提供泛型的目的背道而驰了。 b..向下限定通配符: 正确:Vector&lt;? extends Number&gt; x = new Vector(); 错误:Vector&lt;? extends Number&gt; x = new Vector(); 向上限定通配符: ...

    Java2核心技术.part3

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part1

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝性 1. 2.6...

    Java2核心技术.part6

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part4

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java2核心技术.part2

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    java范例开发大全源代码

     1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符...

    Java范例开发大全 (源程序)

     1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学...

    java范例开发大全

    1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础...

    Java范例开发大全(全书源程序)

    1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符 实例2 自动提升 9 实例...

    java范例开发大全(pdf&源码)

    1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础...

Global site tag (gtag.js) - Google Analytics