Comparable泛型踩坑
发表于|更新于
|浏览量:
善疑人者,人亦疑之;善防人者,人亦防之。——刘基
之前写的Comparable解决泛型限定问题
遇到了这种情况:

这是因为LocalDate没有实现Comparable<LocalDate>
而是由其实现的接口ChronoLocalDate去继承的Comparable<ChronoLocalDate>
并且LocalDate去实现的Serializable,而不是ChronoLocalDate

我们这里直接用的T extends Comparable<T>,此处传了LocalDate就是extends Comparable<LocalDate>
和实现Serializable的不是同一层级,所以我们需要指定为Comparable<? super T>,这个意思就是说允许Comparable里的类型是它的父类或者接口,具体super和extends区别可以看泛型的super和extends

改成Comparable<? super T>后,编译通过
相关推荐
2024-05-31
MybatisPlus“ 漏洞 CVE-2024-35548 ”申明 & 探讨分享
对立有时能比相似更好地说明问题。——歌德 原文链接: MybatisPlus“ 漏洞 CVE-2024-35548 ”申明 & 探讨 - OSCHINA - 中文开源技术交流社区 MybatisPlus 最新漏洞 CVE-2024-35548 说明,对于各种所谓的漏洞申明,也是让我们很头疼的, 出于使用者和 ORM 设计者的理解不一样产生是否为漏洞的分歧,针对这个问题官方也做了很多的说明: 【预防安全漏洞 https://baomidou.com/reference/about-cve/】 【数据安全保护 https://baomidou.com/guides/security/】 MybatisPlus 最新漏洞 CVE-2024-35548 申明 严格意义该问题并不属于真正意义上的漏洞,请问那个 orm 不允许字符串拼接 ?? 【不同意该观点可以留言探讨】 提交者也是缺乏基本常识 “SQL 片段” 主动交给前端传入 这是多么 低级的错误甚至低能 的行为。 更何况官方文档多处强调这种行为是不安全的不推荐的,也提供了判断可能存在注入的检查方案,然而提交漏洞者视而不...
2023-12-30
file获取路径区别
男人勤劳家才富,女人节俭纱成布——佚名 这里 12345678910111213import java.io.File;class Scratch { public static void main(String[] args) throws Exception { File file = new File("../scratch.java"); String path = file.getPath(); String absolutePath = file.getAbsolutePath(); String canonicalPath = file.getCanonicalPath(); System.out.println("path:" + path); System.out.println("absolutePath:" + absolutePath); System.out.print...
2021-05-13
Class下的getEnumConstants
人生是一次航行。航行中必然遇到从各个方面袭来的劲风,然而每一阵风都会加快你的航速。只要你稳住航舵,即使是暴风雨,也不会使你偏离航向。 ——西·切威廉斯【美】 我们使用枚举过程中,可能会有这种需求 通过传入一个枚举的Class获取枚举里的各个常量值 其实这里有一个函数可以满足我们的需求 1java.lang.Class#getEnumConstants 在java.lang.Class类下有个函数getEnumConstants 我们可以这么使用 12345678910111213141516171819public static void main(String[] args) { LikeSelectTypeEnum[] values = getEnumValues(LikeSelectTypeEnum.class); Arrays.stream(values).forEach(System.out::println);}/** * 通过class获取枚举内的常量 * * @param type 枚举对应的class * @return T...
2022-07-26
mp自定义sql注入
我有一瓢酒,可以慰风尘。——韦应物 以mysql语法INSERT INTO user_info (name,age,email) VALUES ( ?,?,? ),( ?,?,? )举例: 首先注入自定义策略 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869package io.github.vampireachao.stream.plugin.mybatisplus.injector;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.core.injector.AbstractMethod;import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;import com.baomidou...
2020-09-12
使用反射获取对象属性的坑
要么庸俗,要么孤独——叔本华 前两天遇到一个坑,当时我通过使用getDeclaredFields()函数获取对象属性时发现一个问题: 获取到的属性的顺序不对,结果我自己一看介绍 原来,它是无序的 所以我们为了解决这个问题 首先自定义一个注解用于制定排序规则 1234567891011121314151617181920212223242526package com.ruben.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @ClassName: BeanFieldSort * @Description: * @Date: 2020/9/11 22:18 * * * @author: achao<achao1441470436 @ gmail.com> * @vers...
2023-01-11
byte-buddy实现mybatis-plus动态mapper
掌握了教育,就掌握了国家——法国谚语 构造动态mapper部分代码如下: 123456789101112131415public static void buildMapper(Configuration configuration, Class<?> entityClass) { if (!(configuration instanceof MybatisConfiguration)) { throw new IllegalArgumentException("configuration must be MybatisConfiguration"); } ENTITY_MAPPER_CLASS_CACHE.computeIfAbsent(entityClass, k -> { Class<?> dynamicMapper = new ByteBuddy() .makeInterface(TypeDescript...
