设置泛型对象的上限使用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 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);//Integer

Person<Double> p2 = new Person<>();

p2.setVal(3.14);//Double

Person<String> p3 = new Person<>();

p3.setVal("007");//String

Person<Object> p4 = new Person<>();

p4.setVal(new Object());//Object

show(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);error

down(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 泛型的上限与下限的更多相关文章

  1. Java 泛型通配符上限和通配符下限

    ①为什么要使用泛型通配符 请参考这篇随笔的下半部分 https://www.cnblogs.com/baxianhua/p/9194369.html   ②通配符上限和通配符下限的简单解释 <? ...

  2. 泛型的上限和下限的Demo

    Main Class package Comparator.Bean; import java.math.BigDecimal; import java.util.List; import java. ...

  3. java中泛型上限,下限应用

    v 一.程序中无形之中用到的泛型 import java.util.*; class Person implements Comparable<Person>{ String name; ...

  4. Java笔记2 : 泛型的体现,及其上限、下限、通配符

    Java中的泛型是在jdk5.0引入的,语法不难,但是需要注意的细节有很多,这里写一下备忘. 首先是最简单的泛型类,泛型方法,泛型接口: //泛型接口的定义 interface MyInter< ...

  5. 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现

    不多说,直接上干货! 先来看个泛型概念提出的背景的例子. GenericDemo.java package zhouls.bigdata.DataFeatureSelection; import ja ...

  6. Java泛型-通配符的上限和下限问题

    Java的泛型中,通配符可以设置上限和下限. 上限:<? extends T> ?是T和T的子类 下限:<? super T> ?是T和T的父类 怎么看待这个上限和下限呢 首先 ...

  7. Java的泛型中,通配符可以设置上限和下限

    上限:<? extends T> ?是T和T的子类 下限:<? super T> ?是T和T的父类 怎么看待这个上限和下限呢 首先应该想 其实对于Java来说 <? ex ...

  8. 初识java泛型

    1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...

  9. 浅谈Java泛型之<? extends T>和<? super T>的区别

    关于Java泛型,这里我不想总结它是什么,这个百度一下一大堆解释,各种java的书籍中也有明确的定义,只要稍微看一下就能很快清楚.从泛型的英文名字Generic type也能看出,Generic普通. ...

随机推荐

  1. phpcms推送文章同时推送自定义字段

    首先进入phpcms后台,模型管理-字段管理里,新建字段,新建字段必须是主表字段,如图所示 2 来到网站根目录,寻找phpcms\modules\content\classes\push_api.cl ...

  2. 详解TCP三握四挥

    TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...

  3. 在Eclipse中添加Tomcat

    在Eclipse中开发web或开启web服务需要Tomcat的支持,在添加Tomcat之前要清楚你的Eclipse版本,如果你的Eclipse是javvEE版的就可以直接安装Tomcat,如果不是就需 ...

  4. Directx11教程(63) tessellation学习(5)

    原文:Directx11教程(63) tessellation学习(5)        TS中生成细分后顶点的u,v,{w}坐标,我们根据控制点和u,w,{w}坐标生成新的顶点位置,在前面四边形的细分 ...

  5. 2019.9.10附加题while练习

    题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万之 ...

  6. pycharm 的简单操作

    pycharm常用 快捷键 ctrl + q 快速查看文档 ctrl + 鼠标左键 进入代码定义 CTRL + F1 显示错误描述或警告信息 F3 下一个 Shift + F3 前一个 Ctrl + ...

  7. MySQL的安装问题总结--终极解决方案

    MySQL安装 选择:custom 自定义 更改路径 安装到其他盘 选择:launch configuration  finish 进行配置 如果忘记选择 找 "E:\Program Fil ...

  8. c++:三

    C++:三   对于共享数据的保护,我们可以使用常量,在使用数据的同时也防止了数据被修改,即可有效的保护数据. 常对象   常对象必须在定义对象时就使用"const"关键字将指定对 ...

  9. Java练习 SDUT-3106_小鑫数数儿

    小鑫数数儿 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 某天小鑫忽然得到了许多的数字,他很好学,老师给他布置了一个任 ...

  10. LOJ 10239 有趣的数列

    LOJ 10239 有趣的数列 首先可以将奇数视作入栈,偶数视作出栈,那么它是卡特兰数,其实打表也能看出来,而且好像可以用dp? 不过这道题的难点不在这里,p不是素数,所以不能用求逆元来做,不过前50 ...