java 16-8 泛型高级之通配符

  泛型高级(通配符)
      ?:任意类型,如果没有明确,那么就是Object以及任意的Java类了
      ? extends E:向下限定,E及其子类
      ? super E:向上限定,E极其父类

 1 import java.util.ArrayList;
 2 import java.util.Collection;
 3 public class GenericDemo {
 4 public static void main(String[] args) {
 5 // 泛型如果明确的写的时候,前后必须一致
 6 Collection<Object> c1 = new ArrayList<Object>();
 7 // Collection<Object> c2 = new ArrayList<Animal>();
 8 // Collection<Object> c3 = new ArrayList<Dog>();
 9 // Collection<Object> c4 = new ArrayList<Cat>();
10
11 // ?表示任意的类型都是可以的
12 Collection<?> c5 = new ArrayList<Object>();
13 Collection<?> c6 = new ArrayList<Animal>();
14 Collection<?> c7 = new ArrayList<Dog>();
15 Collection<?> c8 = new ArrayList<Cat>();
16
17 // ? extends E:向下限定,E及其子类
18 // Collection<? extends Animal> c9 = new ArrayList<Object>();
19 Collection<? extends Animal> c10 = new ArrayList<Animal>();
20 Collection<? extends Animal> c11 = new ArrayList<Dog>();
21 Collection<? extends Animal> c12 = new ArrayList<Cat>();
22
23 // ? super E:向上限定,E极其父类
24 Collection<? super Animal> c13 = new ArrayList<Object>();
25 Collection<? super Animal> c14 = new ArrayList<Animal>();
26 // Collection<? super Animal> c15 = new ArrayList<Dog>();
27 // Collection<? super Animal> c16 = new ArrayList<Cat>();
28 }
29 }
30
31 class Animal {
32 }
33
34 class Dog extends Animal {
35 }
36
37 class Cat extends Animal {
38 }
时间: 2024-10-14 07:23:37

java 16-8 泛型高级之通配符的相关文章

Android(java)学习笔记92:泛型高级之通配符

1 package cn.itcast_07; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 /* 7 * 泛型高级(通配符) 8 * ?:任意类型,如果没有明确,那么就是Object以及任意的Java类了 9 * ? extends E:向下限定,E及其子类 10 * ? super E:向上限定,E极其父类 11 */ 12 public class GenericDemo { 13 public sta

泛型高级之通配符

class Animal { } class Dog extends Animal { } class Cat extends Animal { } //泛型如果明确的写的时候,前后必须一致 Colletion<Object> c1 = new ArrayList<Object>(); Colletion<Object> c2 = new ArrayList<Animal>(); //错误 Colletion<Object> c3 = new A

JAVA 泛型中的通配符 T,E,K,V,?

前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的.对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这

java泛型之使用通配符参数

类型安全虽然有用,但是有时可能会影响代码结构,使得无法被完全接受.例如,对于上一节的Stats类,假设希望添加方法sameAvg(),该方法用于判定两个Stats对象包含的数组的平均值是否相同,而不考虑每个对象包含的数值数据的具体类型.例如,如果一个对象包含double值1.0.2.0.和3.0,另一个对象包含整数值2.1和3,那么平均值是相同的.实现sameAvg()方法的一种方式是传递Stats参数,然后根据调用对象比较参数的平均值,只有当平均值相同时才返回true.例如: ...... I

java 泛型声明与 通配符的使用

一:泛型类 把泛型定义在类上:作用域是整个类的内部 格式:public class 类名<泛型类型1,-> 注意:泛型类型必须是引用类型 import java.util.Arrays; public class GenericClassDemo { public static void main(String[] args) { MyArrayList<String> list = new MyArrayList<String>(); list.add("j

【转】聊一聊-JAVA 泛型中的通配符 T,E,K,V,?

原文:https://juejin.im/post/5d5789d26fb9a06ad0056bd9 前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 泛型带来的好处 在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类

Java 中的泛型详解-Java编程思想

Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的对象的类型 class Holder1 { private Circle a; public Holder1(Circle a) { this.a = a; } Circle get() { return a; } } 上面的类的可重用性不怎么样,无法持有其他类型的任何对象,下面通过持有Object

Java中的泛型 (上) - 基本概念和原理

本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以深刻理解容器类.那,泛型到底是什么呢? 什么是泛型? 一个简单泛型类 我们通过一个简单的例子来说明泛型类的基本概念.实现原理和好处. 基本概念 我们直接来看代码: public class Pair<T> { T first; T second; public Pair(T first, T se

java中的泛型的使用与理解

什么是泛型? 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写 体验泛型代码时定义一些可变部份,那些部份在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型.泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念. 定义: 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型