首页
学习
活动
专区
工具
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,它是所有对象的父类。

63000
您找到你想要的搜索结果了吗?
是的
没有找到

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,它是所有对象的父类。

50050

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

62310

javaphp哪个好_javaphp哪个是主流

首先介绍一下我自己,一直在从事教育行业,有十几年的IT培训经验,从干这行起一直到现在,总会有人问你:服务器端开发是学php好还是java好,如果你告诉她(他)学习php好,他(她)会反问,听说php只能做服务器开发...,java啥都能做,你告诉她java好,他(她)会反问,听说java挺难的,php入门简单,上手快!...如果你连一个基本的循环问题搞起来都费劲,你基本没啥选择的余地,学phpphp是最简单的语言! php是最简单的语言!php是最简单的语言!重要的事情说三遍!...如果你连php都学不会,转行吧,看看其他行业有没有适合你的,不要搞编程了!你不适合! 如果你想学php,那么问题来了,是自学还是视频,或者培训?...传智php课程体系比较旧了,教的还是几年前的东西,而且填鸭式教学,满堂灌,学生消化不好!学员薪资比较低。千锋php课程体系非常新!教授最新的php7.0,课程体系结构也很好!,但要求起点必须大专以上!

6.7K40

、逆与不变

Java 中,数组是协的,也就是说,假设有一个基类 Person 和一个 Person 的子类 Student。...在 Java 的早期版本中,工程师们因为时间紧迫而选择暂时不添加泛型在 Java 的语法中,这导致 Java 的数组没法使用泛型,在这种情况下,如果数组的型是不变,那么要写一些通用的数组操作方法就变得困难...那么在 Java 中又该如何表示协这样的语义呢?...这就保证了协集合的要求。也就是说,Java 选择不在参数化类型声明的时候去声明该类型的型关系,而是选择在这个类型被使用的时候去进行限定。...语义与协的情况是类似的。 于是,Scala 和 Java 的型标记可以进行如下总结 3: Scala Java 解释 +T ?

1.7K30

PHPJava

前言 ---- 最近主要编程语言从 PHP 转到了 Java。这一个多月的经历对我很有意义,所以写文章记录一下。...我用 PHP 做过支付,也用 PHP 做过后台多进程开发,还有用 PHP 做游戏服务端的,PHP 快速开发快速部署的特性完全契合敏捷开发的思想,节约了开发人员大量时间,对一些公司来说,快速开发意味着市场...由于 PHP 是纯粹的 C 系语言,我原准备继续学一门 C 系语言,跟 PHP 互补,我在 PHP 调用 Go 服务的正确方式 一文里也提过,我的选择是 Go。...过渡 ---- 从 PHP 换到 Java,确实有很多地方不适应,虽然大学时也学过 Java,可是已经忘得差不多了,况且写小 Demo 和工业级开发是完全不同的,说说几个转变的点: 强类型:从弱类型到强类型语言...小结 ---- 既然入了 Java 的坑,那么后续会多研究一下 Java 的技术,实现一些工具时也尽量使用 Java,欢迎大家继续关注。

2.2K50

Java+PHP整合

验证两种各自领域称王的语言(JAVA /PHP),不同语言、不同机制的组合在一起,PHP负责WEB层,Java负责业务和数据逻辑层,真是一对黄金组合(Java+PHP整合=混血新宠儿),发挥各自优势...2 Javaphp 结合选型 目前已知的PHPJava在Web间整合技术可分成SOAP(Simple Object Access Protocol)、Quercus、PHP/Java Bridge...2.2.2 数据类型转换 PHPJava各有其语言内部定义的数据类型,当PHP数据传送到Java,或Java数据传送到PHP时,LAJP在内部自动地、准确地对他们进行转换,程序员无需进行任何的解码工作...php php需要通过消息队列和java进程通信,按php的说明,php在4.3.0版本以后支持System V消息队列。 apache 无特殊要求,满足php要求即可。...phpphp的说明,php版本>=4.1.0支持socket apache 无特殊要求,满足php要求即可。 java java版本在1.5以后。

1.2K10

Perl、PHP、Python、Java

,立刻衬托出Java和.NET大象般的身影 ◆ Perl、Python、Ruby和PHP各自有何特点?...据说它将取代Java。” “不要轻言‘取代’二字。”冒号规诫道,“Java没有取代C++,也不会被Ruby取代,至多只是一种再分配。...以前CGI编程就是往Perl之类的代码中嵌入HTML代码,如同Java中的Servlet;PHP则单纯地在HTML代码中插入PHP代码,如同早期的JSP。没有MVC,也不管什么三层架构,更没有ORM。...句号不解:“我想Perl、Python和PHP一定也有不少框架,Java中的框架更是泛滥成灾,何以独独RoR脱颖而出?”...此外,Perl和PHP由于过于流行,反而有不少的历史包袱,人们习惯了将表示逻辑和业务逻辑编织在一起。至于Java企业解决方案,框架太多,搭配组合更多,增加了选择的难度。

96910

C#协和逆

msdn 解释如下:  “协”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。  “逆”则是指能够使用派生程度更小的类型。  解释的很正确,大致就是这样,不过不够直白。 ...直白的理解:  “协”->”和谐的”->”很自然的变化”->string->object :协。  “逆”->”逆常的”->”不正常的变化”->object->string 逆。 ...上面是个人对协和逆的理解,比起记住那些派生,类型,原始指定,更大,更小之类的词语,个人认为要容易点。 ...我个人的理解: 因为协和逆的英文太复杂了,并没有体现协和逆的不同,但是out 和 in 却很直白。...上面演示的是协,接下来要演示下逆

92230

【JavaSE】Java进阶知识一(泛型详解,包括泛型方法,协,逆,擦除机制)

Java中的泛型参数只能是引用类型,不能是基本类型,这与Java的泛型擦出机制有关。...4.通配符下界(泛型的逆) 我们还可以使用通配符下界(?...逆:放宽了对父类类型的泛型约束,但是缺点是不能对参数进行读取数据,只能写入数据。...5.泛型的编译(擦除机制) 擦除机制的实质就是,在编译阶段,Java的泛型类型可能是ArrayList但是在java文件编译成字节码的过程中,泛型参数部分就被擦出了(泛型类,泛型方法的参数全部被替换成它的第一个上界或者顶级父类...擦除机制是Java为了引入泛型这个语法而不得不做出的妥协之举,泛型语法是JDK5之后引入的,为了兼容老版本,不得不在编译阶段将泛型擦除成裸类型。

10810

泛型协与抗(二)

NET 4通过协和抗变为泛型接口和泛型委托添加了一个重要的扩展。协和抗指对参数和返回值的类型进行转换。   ...我们来看下到底什么是协什么是抗: 如果某个返回的类型可以由其基类替换,那么这个类型就是支持协的   如果某个参数类型可以由其派生类替换,那么这个类型就是支持逆(抗)的。...这里就比较接近泛型接口的协和抗的概念了。...理解泛型接口的协和抗(in、out)   我们下面来看看泛型接口的协及抗的例子:   首先我们看下协,在C#高级编程(第十一版)中指出,如果泛型类型用out关键字标注,泛型接口就是协的。...协:(使用关键字out)返回类型可以由其基类所替代的时候,就是支持协的。     抗(逆):(使用关键字in)传入参数类型可以由其派生类所代替的时候,就是支持抗(逆)的。

78420
领券