泛型的super和extends
发表于|更新于
|浏览量:
每个人都不是一座孤岛,一个人必须是这世界上最坚固的岛屿,然后才能成为大陆的一部分。——海明威
今天群友问我,泛型的super和extends区别
我相信,看了这张图你应该能理解

这里第一个list中,使用的泛型为extends,我们发现无法写入,只能读取
第二个list1中使用的super,发现只能写入,无法读取到准确的泛型
综上所述
extends只读不写
super只写不读
相关推荐
2021-06-09
为什么总说不要循环调用dao
我要让全世界都记住我的温柔。——曼德拉 上次咱们测试过了单表多次查询和连表一次查询的性能比较 这次咱们又抽了点时间进行了一次 循坏调用dao查询性能测试 同样是那一百万条数据,最后测试结果出乎意料 123456789101112131415@Testpublic void cycleTest() { long startTime = System.nanoTime(); List<Film> films = filmMapper.selectList(Wrappers.lambdaQuery()); List<Map<String, Object>> collect = films.stream().map(film -> { Language language = languageMapper.selectById(film.getLanguageId()); Language language1 = languageMapper.selectById(film.ge...
2021-03-06
javaFaker
得之,我幸;不得,我命。——徐志摩 如果我们需要造一些假数据,例如随机姓名之类的,可以使用javaFaker 首先是GAV 123456<!-- javaFaker --><dependency> <groupId>com.github.javafaker</groupId> <artifactId>javafaker</artifactId> <version>1.0.2</version></dependency> 然后我们可以往数据库放入200条数据,这里用我们的Faker.instance(Locale.ENGLISH).name().lastName()生成用户名 123456789@Resourceprivate MpUserService mpUserService;@Testpublic void insert() { AtomicInteger index = new AtomicInteger(5); ...
2023-12-10
可变参数传入数组
通常是不想成名的人反而成名。——霍姆斯 今天遇到这样一个场景: 1234 @Overridepublic void deleteAllById(@Nonnull Iterable<? extends String> strings) { stringRedisTemplate.opsForHash().delete(SmCacheConst.STATE_MACHINE, );} 这里的org.springframework.data.redis.core.HashOperations#delete如下: 1 Long delete(H key, Object... hashKeys); 那这里我如果直接将Iterable转为数组,能正常运转吗? 也就是说,如果我是: 12Object[] array = StreamSupport.stream(strings.spliterator(), false).toArray(); stringRedisTemplate.opsForHash().delete(SmCac...
2021-07-10
mybatis-plus防止全表更新与删除
宁要好梨一个,不要烂梨一筐。积极肯干和忠心耿耿的人即使只有两三个,也比十个朝气沉沉的人强。——列宁 我们可以如下配置 12345678910111213@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); // 阻止全表更新与删除 BlockAttackInnerInterceptor blockAttackInnerInterceptor = new BlockAttackInnerInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false paginatio...
2020-12-01
debugのChrome篇
我来到这个世界为的是看太阳和蔚蓝色的田野。——巴尔蒙特 chrome中如何debug?我们可以打开chrome的控制台 找到我们的文件 然后在想要调试的地方打断点 然后执行到此处的时候就会触发调试 我们可以点击右侧的Step into next function call来执行下一步函数调用 可以点击Resume script execution放行到下个断点 然后Step over next function call则可以执行步过,执行到当前函数结尾 Step out of current function步出,则可以跳出我们当前执行的函数 Step和我们第一个Step into next function call差不多,都是执行下一步 Activate breakpoints则是禁用断点 最后一个Pause on exceptions则是在所有异常发生时暂停程序,开始调试 我们也可以直接在代码里右键,点击执行到当前代码 Call Stack区域可以查看我们当前函数以及它的调用者 甚至 调用者的调用者… 下方的Scope区域可以观测我们的参数,...
2022-10-18
获取包装异常中真实异常
没有弄清对方的底细,绝不能掏出你的心来——巴尔扎克 重复调用getCause即可 12345678910111213141516171819202122232425262728package io.github.vampireachao.stream.core.lambda;/** * LambdaInvokeException * * @author VampireAchao ZVerify * @since 2022/9/4 */public class LambdaInvokeException extends RuntimeException { /** * <p>Constructor for LambdaInvokeException.</p> * * @param cause a {@link java.lang.Throwable} object */ public LambdaInvokeException(Throwable cause) { ...

阿超
我的名字叫阿超 年龄25岁 家在北京市 职业是软件开发 每天最晚也会在八点前回家 不抽烟 酒浅尝辄止 晚上十二点上床 保证睡足八个小时 睡前写一篇博客 再做二十分钟俯卧撑暖身 然后再睡觉 基本能熟睡到天亮 像婴儿一样不留下任何疲劳和压力 就这样迎来第二天的早晨 健康检查结果也显示我很正常 我想说明我是一个不论何时都追求内心平稳的人 不拘泥于胜负 不纠结于烦恼 不树立使我夜不能寐的敌人 这就是我在这社会的生活态度
Follow Me公告
This is my Blog