首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java泛型的协与逆

导读 泛型是Java最基础的语法之一,众所周知:出于安全原因,泛型默认不能支持型(否则会引入危险),因此Java提供了通配符上限和通配符下限来支持型,其中通配符上限就泛型协,通配符下限就是泛型逆...泛型默认不支持型 为了避免重蹈Java数组的覆辙,Java泛型显然不能再继续支持默认的型。...协:通配符上限 为了让泛型支持型Java引入了通配符上限语法:如果A是B的子类,那么List相当于是List<?...总结来说,支持协的集合只能取出元素,不能添加元素——疯狂Java讲义归纳的口诀是:协只出不进!...总结来说,支持逆的集合只能添加元素,不能取出元素(除非取出元素都当成Object)——疯狂Java讲义归纳的口诀是:逆只进不出!

1.2K40

Java泛型的协和逆

背景 文接上回,说到过Java的泛型擦除问题,这块我又联想到一个有意思的考点泛型的协和逆。...一、协 首先Java的数组是协的,所以假设A是B的父类,那么A[]是可以保存A或者B的对象的,并且A[]是B[]的父类。 ,写谁都会写,子类型限定。...根因是Java的泛型没有协类型,无法关联起来,也就没有关系。 利用通配符,?代表子类,T为父类。 常见的例子比如,List<?...二、逆 ,超类型限定。 逆同样也是在各类源码中层出不穷,结合协的理解,这块相信大家应该不难理解。 常见的例子比如,List<?...理解它,也可以通过Java的继承关系, 假设存在继承关系Object-》T、T-》A、T-》B; 即T为A、B的父类,协面向子类;逆面向Object,它是所有对象的父类。

62500

Java泛型的协和逆

背景 文接上回,说到过Java的泛型擦除问题,这块我又联想到一个有意思的考点泛型的协和逆。...一、协 首先Java的数组是协的,所以假设A是B的父类,那么A[]是可以保存A或者B的对象的,并且A[]是B[]的父类。 ,写谁都会写,子类型限定。...根因是Java的泛型没有协类型,无法关联起来,也就没有关系。 利用通配符,?代表子类,T为父类。 常见的例子比如,List<?...二、逆 ,超类型限定。 逆同样也是在各类源码中层出不穷,结合协的理解,这块相信大家应该不难理解。 常见的例子比如,List<?...理解它,也可以通过Java的继承关系, 假设存在继承关系Object-》T、T-》A、T-》B; 即T为A、B的父类,协面向子类;逆面向Object,它是所有对象的父类。

49050

JAVA冷知识】什么是逆(contravariant)&协(covariant)?数组支持协&逆吗?泛型呢?

写在前面 ---- 和小伙伴分享一些java小知识点,主要围绕下面几点: 什么是逆(contravariant)&协(covariant)? 数组支持协&逆吗? 泛型支持协&逆吗?...下面们结合代码就数组和泛型的协和逆进行分析 我们来看一段代码 package com.liruilong; import java.util.Arrays; /** * @Project_name...Error:(17, 30) java: 不兼容的类型: java.lang.Object无法转换为java.lang.Number 数组不支持直接逆,那么是否可以接见的实现逆?...说明对于数组的逆变来讲,是不支持逆的,将父类强制转化为子类报类型转化异常,java并没有对这方面做限制。...> 但可以使用通配符(Wildcard)模拟协,通配符在编译期有效,在运行期必须为一个明确的类型 package com.liruilong; import java.util.ArrayList

61410
领券