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

Java泛型的协与逆

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

1.3K40

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

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

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

    54250

    Java 之父 Jame:差点把 Java 命名成了 Silk(丝绸)

    Java 命名的由来 Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。...就在Sun公司把自己的股票代码改为Java后不久,Java之父Jame Gosling接受Sys-con.com的采访,揭开了Java得名的来龙去脉。...所以,重新取名成了头等大事。 Jame Gosling 如果通过正式程序来注册产品的名称将即费时又费钱。简姆斯 古斯林决定通过市场部门,请来了一个命名顾问,召开命名征集会。...公司网站上还有这样一张照片,好像是多年前北大南门外的那条街道,现在成了单行线的那个: 早期的Java 语言最开始只是Sun计算机(Sun MicroSystems)公司在1990年12月开始研究的一个内部项目...1996年1月,Sun公司成立了Java业务集团,专门开发Java技术。 由于商标搜索显示Oak已被一家显卡制造商注册。于是同年,Oak被改名为Java

    54530

    TF2下分自编码的N种写法

    在2.x时代,一个模型会变成有N种写法,而且每种写法的规则更加晦涩,写起模型来,出错率成指数增长。这使得开发人员一般会用30%的时间来实现逻辑,70%的时间来处理各种框架运行时所遇到的软件问题。...然而,即便是这两个子框架,自由组合起来,也可以实现n中开发方式。对用户来说,还是一样的灵活、坑多。本文就TF2.x在这两个框架下的开发,做一个系统的介绍。我们尽量不发散太多的开发方法。...在学习本文之前,请先熟悉一下书中的分自编码介绍。...1.2 组合模型 定义采样器,并将编码器和解码器组合起来,形成分自编码模型....return loss 该类的训练方法可以参考2,3节.具体可以参考配套的源码. 5.2 更合理的类封装模式 真正使用是,常常会将特征提取部分单独分开,作为一个类.这样利于扩展.令分自编码功能方面的部分单独成一个类只完成分训练功能

    92810

    n皇后问题 回溯法java_Java解决N皇后问题

    问题描述: 要求在一个n×n的棋盘上放置n个皇后,使得它们彼此不受攻击。 按照国际象棋的规则,一个皇后可以攻击与之同一行或同一列或同一斜线上的任何棋子。...因此,n皇后问题等价于:要求在一个n×n的棋盘上放置n个皇后,使得任意两个皇后不在同一行或同一列或同一斜线上。...一个皇后的攻击范围: n皇后的解空间—完全n叉树: 要找出“四皇后”问题的解,最可靠的方法就是把各种情况都分析一遍,将符合条件的解找出来。但这样做十分地费时间。...1进行;要么反过来让y=0固定,让x从0到n-1进行。...全部代码(其中还包括将N皇后问题的解显示输出的函数): package quene; import java.util.LinkedList; import java.util.Scanner; public

    74640

    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

    68210

    n皇后问题java

    n皇后问题是一个典型的回溯算法的题目,就是在n*n的面板上,放n个皇后,每个皇后会攻击同一列和同一行还有两个斜边上的元素,问你放的方法,返回形式是一个List嵌套List,每个List里都是一种解决方案...,每一个解决方案都是画一个面板,解决方案里的每一个元素都是每一个横行,如果没有放皇后,则以.来形容,如果放了皇后,以Q填充,在思想上肯定还是有一定难度的,先贴上java代码的实现,这里已经优化了很多,因为我们是一行一行来放的...ArrayList>();//创建一个List[List用来存放最终结果并返回 public List> solveNQueens(int n)...{ char[][] borad = new char[n][n];//设置一个n*n的正方形char型数组 for(char[] rchar: borad){//遍历二维数组的每一行...= borad.length;//判断一下这个是几个皇后的问题,也就是棋盘的宽度 if(row==n){//如果n-1也便利完了,那么此时就会row==n,说明找到了一组解,将这个解放到返回的集合中

    72110

    (Java实现) N皇后问题

    n皇后问题是一个以国际象棋为背景的问题:在n×n的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,即任意两个皇后都不能处于同一条横行、纵行或斜线上。...蛮力法思想: ---- 解决n皇后问题的思想本质上就是蛮力法,生成所有可能的摆放情况,并判断该情况是否满足要求,我们以树结构来表示解决问题的方法。...回溯法思想: ---- 回溯法其实是以蛮力法为基础,只是不需要生成所有的情况,我们可以发现,在整棵树中,有些棋盘的摆放情况在未达到叶子结点时,便已经不满足n皇后的条件了,那么我们就没有必要再去往下摆放棋子...具体实现: ---- 根据n皇后问题的规模,创建大小为n的数组代替树结构,使其下标代表行数,内容代表列数,数组中的每个数必定位于不同的行,数组内容不同证明两个元素位于不同的列,两数下标的差的绝对值不等于两数内容的差的绝对值...import java.util.Arrays; import java.util.Scanner; public class Nhuanghouwenti { private static int queenNum

    83810

    文本或代码中 nr 的区别

    素材来源:网络 编辑整理:strongerHuang 我们使用 printf 打印时基本都会用到 \n 和 \r 之类控制字符,比如: printf("hello world!...\r\n"); 那你知道这些 \n 和 \r 的区别吗? 一、关于 \n 和 \r 在 ASCII 码中,我们会看到有一类不可显示的字符,叫控制字符,其中就包含\r 和 \n 等控制字符。 ?...'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的 Enter 是两个加起来。 有的编辑器只认\r\n,有的编辑器则两个都认。所以要想通用的话,最好用\r\n 换行。...在微软的 MS-DOS 和 Windows 中,使用“回车 CR('\r')”和“换行 LF('\n')”两个字符作为换行符; Windows 系统里面,每行结尾是 回车+换行(CR+LF),即“\r\...n”; Unix 系统里,每行结尾只有 换行 CR,即“\n”; Mac 系统里,每行结尾是 回车 CR 即'\r'; 所以我们平时编写文件的回车符应该确切来说叫做回车换行符; 三、影响 一个直接后果是

    4.3K20
    领券