泛型的上下边界 : ? extends E 与 ? super T
public class Problem {
    public static void main(String[] args) {
        List<? extends A> list;
        List<SonA> list2 = new ArrayList<SonA>();
        list = list2;
         list.add(new SonA()  //error
        list2.add(new SonA());
        A a=list.get();
    }
}
class A extends FatherA {
}
class SonA extends A {
}
class FatherA {
}
由代码可知,? extend A表示list集合里面装的都是A的子类,因此arraylist中的对象只能存放A的子类,但是list.add(new SonA())编译时不可通过的.因为list中只是指定了一个范围,并没有特定一个类,所以不能使用add方法对list进行集合的add,会出现转换的错误。然而能使用get方法,因为集合中的类型都可以用父类A 来表示
 public static void main(String[] args) {
         List<? super A> list = new ArrayList<FatherA>();
         // List<? super A> list=new ArrayList<SonA>(); error
         List<FatherA> list2 = new ArrayList<FatherA>();
         list2.add(new FatherA());
         list.add(new SonA());
         // list.add(new FatherA()); error
         Object o = list.get(0);
         FatherA a = (FatherA) o;
     }
 }
这就是 ?suepr A ,list集合中存放的是A的父类 所以能指向FatherA的arraylist,那为什么这里能使用add呢,因为list中都是A或A的父类,如果把A的子类添加进去是不影响的,因为这些子类都能用A或者A的父类来表示,能进行上转型。但是添加A的父类就不行了,因为互相之间不知道有什么联系,会出现类型错误。get的时候只能用超类Object表示,但是能进行向下转型。
其实,一个集合中只能用一个类型来表示,只要互相之间能转换就行。
泛型的上下边界 : ? extends E 与 ? super T的更多相关文章
- Java 之泛型通配符 ? extends T 与 ? super T 解惑
		简述 大家在平时的工作学习中, 肯定会见过不少如下的语句: List<? super T> List<? extends T> 我们都知道, 上面的代码时关于 Java 泛型的 ... 
- JAVA泛型知识--> <? extends T>和<? super T>
		<? extends T> 和 <? super T> 是Java泛型中的“通配符(Wildcards)” 和 “边界(Bounds)”的概念 <? extends T& ... 
- JAVA泛型知识(二)--> <? extends T>和<? super T>
		<? extends T> 和 <? super T> 是Java泛型中的“通配符(Wildcards)” 和 “边界(Bounds)”的概念 <? extends T& ... 
- 【Java 泛型】之 <? super T> 和<? extends T> 中 super ,extends如何理解?有何异同?
		Java 泛型 <? super T> 和<? extendsT>中 super ,extends怎么 理解?有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型 ... 
- 浅谈Java泛型之<? extends T>和<? super T>的区别
		关于Java泛型,这里我不想总结它是什么,这个百度一下一大堆解释,各种java的书籍中也有明确的定义,只要稍微看一下就能很快清楚.从泛型的英文名字Generic type也能看出,Generic普通. ... 
- Java泛型 PECS(Producer Extends, Consumer Super)
		本文转载自ImportNew,原文链接 Java 泛型: 什么是PECS(Producer Extends, Consumer Super) PECS指“Producer Extends,Consum ... 
- Java泛型的定义以及对于<? extends T>和<? super T>
		Java 中对于泛型方法的定义: public <T> T getT(){ .....相关代码; } 其中我对<T>的理解就是申明只是一个泛型方法的标记,T是返回的类型. 对于 ... 
- <? extends T>和<? super T>
		转自:Java泛型中extends和super的区别? 另,问题来源:Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? <? ext ... 
- <? extends T>和<? super T>的理解
		背景:对泛型中使用super和extends关键字进行分析总结. 问题: public class TestExtend { public static void main(String[] args ... 
- 再论<? extends T>和<? super T>
		参考: https://www.cnblogs.com/drizzlewithwind/p/6100164.html Java 泛型 <? super T> 中 super 怎么 理解?与 ... 
随机推荐
- webapi   下载Ftp文件并返回流到浏览器完成文件下载
			ResultModel<HttpResponseMessage> resultModel = new ResultModel<HttpResponseMessage>(Resu ... 
- Web 端异步下载文件
			Web 端异步下载文件 实现文件异步下载: 在服务端无法返回文件,或发生异常时给予提示. JavaScript: 服务端返回的JSON对象形如: { code:200, msg:'下载成功|未找到指定 ... 
- git Remote: HTTP Basic: Access denied Git failed with a fatal error.
			解决方案: git clone 项目失败,报下面的错误信息: $ git clone http://192.168.0.141/xxxx.git Cloning into 'appEnterprise ... 
- 论文笔记:Auto-ReID: Searching for a Part-aware ConvNet for Person Re-Identification
			Auto-ReID: Searching for a Part-aware ConvNet for Person Re-Identification 2019-03-26 15:27:10 Paper ... 
- C# 批量新增的两种方法。
			public class Test { private static readonly string strConnection = ""; public static void ... 
- js switch 用法
			//获取星期 //例子1 var day=new Date().getDay(); switch (day) { : x="Today it's Saturday"; break; ... 
- 显示等待 (web自动化测试)
			from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from sel ... 
- Python学习笔记_1
			一.基础知识 1. 基础: 数据结构:常量.变量.元组(列表).字典 数据类型:int float str 算法:分支和循环 面向对象:类.属性.方法 封装.继承.多态 2. python语言的特点: ... 
- inode满处理
			https://blog.csdn.net/liuxiao723846/article/details/79423581 [root@monitor251 bin]# for i in /boot; ... 
- SQL 基础学习(1):下载DB Browser for SQLite. 下载graphviz(为了使用Rails ERD的前提)出现❌,已debug.
			SQL is a standard language for storing, manipulating and retrieving data in databases. 关系型数据库:RDBMS( ... 
