java 泛型的上限与下限、泛型通配符、泛型上下限
java 泛型的上限与下限
设置泛型对象的上限使用extends,表示参数类型只能是该类型或该类型的子类:
声明对象:类名<? extends 类> 对象名
定义类:类名<泛型标签 extends 类>{}
设置泛型对象的下限使用super,表示参数类型只能是该类型或该类型的父类:
声明对象:类名<? super 类> 对象名称
定义类:类名<泛型标签 extends类>{}
public static void show(List<? extends Number> l){}
public static void show(List<? super String> l){}
泛型的上限
public static void main(String[] args) {Person<Integer> p1 = new Person<>();p1.setVal(99);Person<Double> p2 = new Person<>();p2.setVal(3.14);Person<String> p3 = new Person<>();p3.setVal("007");show(p1);//√show(p2);//√show(p3);//×
}public static void show(Person<? extends Number> p){//此处限定了Person的参数类型只能是Number或者是其子类,而String并不属于Number。System.out.println(p.getVal());}
泛型的下限
public static void main(String[] args) {Person<Integer> p1 = new Person<>();p1.setVal(99);//IntegerPerson<Double> p2 = new Person<>();p2.setVal(3.14);//DoublePerson<String> p3 = new Person<>();p3.setVal("007");//StringPerson<Object> p4 = new Person<>();p4.setVal(new Object());//Objectshow(p1);//×show(p2);//×show(p3);//√show(p4);//√}public static void show(Person<? super String> p){System.out.println(p.getVal());}
很好的例子!
package generic;
import java.util.ArrayList;
import java.util.List; public class GenericDemo3 {public static void main(String[] args) {//因为show方法是用List<?>通配符接收的,所以可以是任意类型!List<String> l1 = new ArrayList<>();//new ArrayList<String>()show(l1);List<Double> l2 = new ArrayList<>();show(l2);List<Number> l3 = new ArrayList<>();show(l3); List<Object> l4 = new ArrayList<>();show(l4);//使用up方法的话接收类型为Number或者其子类//up(l1);//错误,因为up方法接收类型为Number或者其子类,l1(String)不符合!up(l2);up(l3);//使用down方法的话接收类型为Number或者其父类//down(l2);errordown(l3);down(l4);}public static void down(List<? super Number> l){for (Object object : l) {System.out.println(object);}}public static void up(List<? extends Number> l){for (Object object : l) {System.out.println(object);}}public static void show(List<?> l){for (Object object : l) {System.out.println(object);}}}
java 泛型的上限与下限、泛型通配符、泛型上下限相关推荐
- java泛型有什么用_什么叫泛型?有什么作用?
一.什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常. 泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊 ...
- Java进阶知识笔记2【Collection、泛型】
[Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 学习目标 能够说出集合与数组的区别 说出Collection集合的常用功能 能够使用迭代器对集合进行取元素 ...
- 不能使用泛型的形参创建对象_数据类型之----泛型
泛型 泛型:可以在类或方法中预支地使用未知的类型. 一般在创建对象时,将未知的类型确定具体的类型.当没有指定泛型时,默认类型为Object类型. 使用泛型的好处 <1>将运行时期的Clas ...
- java中泛型上限,下限应用
v 一.程序中无形之中用到的泛型 import java.util.*; class Person implements Comparable<Person>{String name;in ...
- Java 泛型总结(三):通配符的使用
简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型数组.在泛型的使用中,还有个重要的东西叫通配符,本文介绍通配符的使用. 这个系列的另外两篇文章: Java 泛型总结(一):基本用法与类型擦除 J ...
- java for(o t :object) 获取顺序号_JAVA泛型通配符T,E,K,V区别 瞬间豁然开朗
1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...
- Java集合(八) 迭代器Iterator、泛型、Map映射
一. 迭代器 迭代器的增删作用于原集合 用迭代器遍历集合 , 用指针的挪动来获取对应的元素,通过标记这个元素是否可以用来操作 去操作原集合. 在迭代过程中不允许直接操作原集合. forEach --- ...
- Java:高级之泛型概念引入,泛型可以设置多个类型参数,泛型继承和泛型接口实现,限制泛型可用类型,泛型通配的方式,泛型方法,泛型方法限制泛型可用类型
目录页 泛型简介 泛型类 限制泛型可用类型 类型通配声明 泛型方法 问题引入 如果我们需要产生多个对象,每个对象的逻辑完 ...
- Java编程思想 第十五章:泛型
1. 泛型 "泛型"意思就是适用于许多类型. 使用泛型的目的之一: 指定容器持有什么类型,让编译器确保正确性,而不是在运行期发现错误. 这个容器可以看成是有其他类型对象作为成员的类 ...
最新文章
- shell 中的return
- xml实现删除一个节点
- ubuntu在xampp下安装memcache扩展
- Android studio错误:module not specified
- ttvnc 服务器 自建,FastVNC(可以自架中心服务端的远程协助工具)
- kettle工具实现数据的颗粒度转换以及珊瑚橘商务规划计算
- DB2活动日志占用过大
- MMA-mathematica数值求解非线性偏微分方程组
- 常用短信平台一览,记得收藏哦
- Gitlab和Github区别
- CIKM 2021 | 推荐系统相关论文分类整理
- 计算机硬件耗电,耗电大户不一定就“费电”_主板评测-中关村在线
- 【IoT】产品设计:硬件产品外观样品设计工艺及要求(手板)
- 国产LIN收发器芯片SIT1028,PIN to PIN替代TJA1028
- TRIZ普及热潮有望到来
- Unity使用SteamVR2.0 SteamVRInput配置和使用
- 富瑞宣布战略交易,以简化运营,持续专注于打造领先的独立全服务型全球投行公司
- vue2、vue3 v-model
- Rviz玩转三轴机械臂
- 英语四级作文计算机,英语四级作文范文:电脑
热门文章
- java awt 按钮响应_Java AWT按钮
- Java BigDecimal add()方法与示例
- Java PriorityQueue poll()方法与示例
- 开源软件和自由软件_自由和开源软件的经济学
- 使用tkinter模块在Python中进行GUI编程
- java如何遍历combobox_如何通过COMBOBOX设置Java中的框架标题?
- 北航计算机学院博士机试考试题,北航2015考博真题回忆及全套资料 - 考博 - 小木虫 - 学术 科研 互动社区...
- 如何将多个一维列表转化为二维列表_数据分析2_如何处理一维、二维数据
- Java LineNumberReader mark()方法与示例
- js math.hypot_带有Python示例的math.hypot()方法