设置泛型对象的上限使用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. NOIP模拟 7.05

    Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我考你 ...

  2. Eslint报错的翻译

    若在git中出现这个 http://eslint.org/docs/rules/eol-last 他是提醒你:在文件末尾要求或禁止换行 比如代码如下: 若在git中出现这个 https://eslin ...

  3. iscroll5在使用情况下click事件失效的问题

    转载自:http://www.52html5.com/?p=2618 Bug描述: iOS.android4.4+下不能触发click事件. Bug解决: 调用iscroll插件,增加配置参数:cli ...

  4. 【巨人的步伐以及人类的进击】BSGS algorithm

    原问题 求ax≡b(mod p)的最小正整数解. 解法 实际上是以空间换取时间的算法. 先用散列表把 ai (i∈[0,p√)) 都储存起来. 然后再从小到大枚举 j (j∈[0,p√)) ,在散列表 ...

  5. 一个挺好用的自己写的小插件(用与把一般的图片转换成预制)——UNITY3D

    首先 下载一个DLL文件,名字:System.Windows.Forms. 然后把这个文件放在资源目录,位置随便. 接着上代码 : using System.IO; using UnityEditor ...

  6. 通过在__init__.py中定义__all__变量,来简化from*import*的书写

    下图是一个带被引入使用的包的结构,包名比较长,给书写from*import*带来很多麻烦 为了解决麻烦,在__init__.py编写了如下内容 from .httputil import HTTPUt ...

  7. XPath 获取两个node中间的HTML Nodes

    XPath 获取两个node中间的HTML Nodes 2015-06-01 16:42 972人阅读 评论(0) 收藏 举报 //div[@id="Recipe"]//h5[co ...

  8. [React Native] 解析JSON文件

    在编写代码时,开发者有时需要存储一些比较多,在应用程序运行时不需要更改的数据.文件大不便于写在代码中,可以把这些数据存储到JSON文件中. 优点非常明显: 1. 数据存放在单独的文件中,代码精简有条理 ...

  9. docker如何push镜像到docker hub个人的仓库

    docker如何push镜像到docker hub个人的仓库 step1——找到本地镜像的ID:docker images step2——登陆Hub:docker login --username=u ...

  10. HDU 5584 LCM Walk【搜索】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意: 分析: 这题比赛的时候卡了很久,一直在用数论的方法解决. 其实从终点往前推就可以发现, ...