首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java泛型的协变与逆变

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

1.3K40

Java泛型的协变和逆变

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

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

    字体标识设计技巧!添减联断变

    运用"添"、"减"、"联"、"断"、"变"这五种方式,可以在传统造型的基础上,打破原有字体的结构规范,形成个性鲜明的字体标志。...即将字体的一部分内容删掉,最常见的是删除文字笔画。“减”也有一定的原则,第一、“减”要有利于反映字体标志的表现内容,让观众能够看得懂,不能以失去文字原有意义为代价。...变常言道“思则变,变则通”,“变”也是字体标志设计常用的技法之一。所谓“变”就是将字体、图形的某一部分内容进行相应的变化,形成一个新的样式。...“变”有两种方式,第一种是变化字体的某一笔画或样式,增加标志的可看性和寓意表达。第二种方式是变化字体的整体字型,使之形成新的样式。...每种字体都有其特定的历史和文化背景,并在长期的发展过程中形成了程序化的个性特征,这些特征一方面便于阅读和交流,但另一方面也让文字变的没有新意容易重复通过“添”“减”“联”“断”“变”这五种方式,可以有效的调整字体原有的结构规范

    60920

    Java泛型的协变和逆变

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

    54350

    Java版 数字金额大写转换--Java学习网

    需求:读入一个浮点数值,将其转化为中文金额的大写形式。如123.45,转化为:壹佰贰拾叁元肆角伍分。以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加“整”字。...2.当金额中含有连续的0时,只需写一个“零”即可。如10005表示为:壹万零伍元整。3.10的表示形式。如120表示为:壹佰贰拾元整。而10则表示为:拾元整。 ?...负壹拾亿零壹佰壹拾万零壹佰零壹元整 System.out.println(digitUppercase(-110101010.10)); // 负壹亿壹仟零壹拾万壹仟零壹拾元壹角 } /** * 数字金额大写转换...,思想先写个完整的然后将如零拾替换成零 要用到正则表达式 */ public static String digitUppercase(double n) { String fraction[] = {

    1.2K30

    java将输入的数字金额转换为中文大写金额

    前言 将输入的数字字符串中的每一个数字字符转换为对应的中文大写,例如12345转换为壹贰叁肆伍,再将此中文大写和对应的单位进行字符串的拼接并一起输出 输出结果为:零佰零拾壹万贰仟叁佰肆拾伍元 一、具体代码...package com.ithm.stringdemo; import java.util.Scanner; public class Demo1 { //获取每一个数字对应的中文大写...return capitalnumber[number]; } public static void main(String[] args) { //数组里面放入输入的金额的每一位数字...sz[i++]=ge; money=money/10; if(money==0) break; } //获取大写数字的字符串...capmoney; } //定义一个字符串数组存放单位 String []arr={"佰","拾","万","仟","佰","拾","元"}; //将大写数字和单位数组进行字符串的拼接

    51310

    Linux 下 Java 安装字体方法

    今天终于把项目部署到线上了~,就这个Mysql的原因使用2台小主机进行部署,没想到这么吃内存!...非要5.7+的MYSQL数据才行,忙完了之后看了下Acitivti流程图字体乱码了,因为在windows下设置的微软雅黑,linux默认是没有的,所以需要给jdk安装一个微软雅黑字体。...1)首先找到windows下面的字体,不用去其他地方下了,windows就有,路径在C:\Windows\Fonts,然后右上角搜索要的字体,我这里直接搜微软雅黑就出来了,然后拷贝到桌面上,拷贝出来会发现是三个文件...,千万不要删任何一个哦 2)然后找到jdk的安装目录下的字体目录,cd $JAVA_HOME/jre/lib/fonts 3)然后新建一个 fallback 文件夹,进入此文件夹,将字体文件复制在里面哦...yum install mkfontscale mkfontscale mkfontdir 5)OK,重启java程序即可,看效果~

    4.1K30

    MySQL表字段值转换为小写(或大写)的java代码实现

    本文将介绍如何使用Java代码实现将MySQL表中某字段的所有值转换为小写或大写的功能。通过本文的学习,读者将能够在实际项目中应用该功能,并加深对MySQL和Java的理解。...这时就需要通过编程的方式来实现这一功能。 二、代码实现 下面是一个简单的Java代码示例,演示了如何使用JDBC连接MySQL数据库,并将表中某个字段的所有值转换为小写。...import java.sql.*; public class MySQLLowerCaseConverter { public static void main(String[] args...Java代码实现将MySQL表中某字段的所有值转换为小写的功能。...希望本文对读者理解MySQL和Java的应用有所帮助,并期待大家的点赞、评论和互动,共同探讨和分享更多有趣的技术话题! 我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    61320

    Java漫谈-协变返回类型

    Java SE5中添加协变返回类型,表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型。...return new Grain(); } } Grain.java:基类方法的返回类型 基类方法的返回类型Grain /** * 谷物(Grain ),可以在工厂(Mill)中被加工(process...Mill { /** * 重写Mill的process()方法 * 协变返回类型允许返回更具体的Wheat类型,亦即此时的Wheat为协变返回类型 * @return...协变返回类型允许返回更具体的Wheat类型 扩: 里氏代换原则(任何基类可以出现的地方,子类一定可以出现) 重写/覆盖规则:  1.重写方法不能比被重写方法限制有更严格的访问级别。...此处的Wheat即成了协变返回类型。 相关下载 点击下载

    1.1K10

    老大写的代码,真是绝了!

    作者:聚IT 来源:touyatoutiao.com/i6847406631983153672 场景:当我们接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,头条),不同渠道所需的处理方式不同...,下面我们写一个简单Demo来实现该的场景。...当我们需要新增新的渠道的时候,需要对main方法中的逻辑进行修改调整。这违背了设计模式中的开放封闭规则。开放封闭原bai则的核心的思想是软件实体是可扩du展,而不可zhi修改的。...也就是说,对扩展是开dao放的,而对修改是封闭的 新增渠道后,修改代码会产生大量的if else,不太优雅。为了解决以上的两个问题,我们可以借助枚举类来巧妙优化。...最后 以上是通过枚举来巧妙干掉if-else的方案,对于减少 if-else 还有很多有趣的解决方案(如:状态设计模式等),感兴趣的朋友去查阅相关的资料。 -End-

    23010

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

    下面们结合代码就数组和泛型的协变和逆变进行分析 我们来看一段代码 package com.liruilong; import java.util.Arrays; /** * @Project_name...,希望是可以通过父类来覆盖代替子类,但是直接编译报错,说明数组是不支持直接逆变的 Error:(17, 30) java: 不兼容的类型: java.lang.Object无法转换为java.lang.Number...说明对于数组的逆变来讲,是不支持逆变的,将父类强制转化为子类报类型转化异常,java并没有对这方面做限制。...Error:(17, 27) java: 不兼容的类型: java.util.ArrayListjava.lang.Integer>无法转换为java.util.Listjava.lang.Number...> 但可以使用通配符(Wildcard)模拟协变逆变,通配符在编译期有效,在运行期必须为一个明确的类型 package com.liruilong; import java.util.ArrayList

    70710
    领券