解决Unsupported class file major version 61错误
线上遇到这个报错,通常就是Java运行环境版本比编译时用的版本低,整理了原因和两种实际可用的处理方式。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-08-25 12:00:50 Java Comparable 排序
Java 里给自定义对象排序,最省事的做法就是让类实现 Comparable 接口,然后重写 compareTo 方法。
这个方法返回 int,排序底层靠这个值判断当前对象和另一个对象谁前谁后。Arrays.sort 不用你写比较器就能直接排。
下面这段把 Person 类和测试放一起,按姓名排序:
import java.util.Arrays;
class Person implements Comparable<Person> {
String name;
int score;
Person(String name, int score) {
this.name = name;
this.score = score;
}
public int compareTo(Person other) {
return this.name.compareTo(other.name);
}
public String toString() {
return this.name + "," + this.score;
}
}
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("Alice", 90),
new Person("Bob", 85),
new Person("Charlie", 95)
};
System.out.println("Original array:");
for (Person person : people) {
System.out.println(person);
}
Arrays.sort(people);
System.out.println("\nSorted array:");
for (Person person : people) {
System.out.println(person);
}
}
}
compareTo 的返回值规则得记清楚:负数说明当前对象排在参数对象前面,零说明两者相等,正数说明排在后面。我第一次用的时候老记混正负方向,后来就记一条,负数就是排前面。
上面用 String 的 compareTo,按字典序,Alice 会排在 Bob 前面。
有个地方容易踩坑。如果排序字段是 int 或 long,有些人会直接 return this.score - other.score,平时跑着没事,但遇到极端值比如 Integer.MIN_VALUE 和 Integer.MAX_VALUE,减法会溢出,排序结果就乱了。
稳妥点用 Integer.compare(this.score, other.score)。
这种单一字段的自然排序用 Comparable 够用。
但一个类只能有一个 compareTo,如果排序规则会变,比如先按 score 再按 name,或者要按多个字段组合排,那就要用 Comparator 单独定义,别硬塞进 compareTo。
类似这种重复操作,能自动化就自动化。
像证书申请部署,我现在基本交给 lcjmSSL,自动申请验证部署,支持多域名和泛域名,不用每次手动跑命令。
Comparable 就一个 compareTo 方法,实现对了排序基本不会出问题。
线上遇到这个报错,通常就是Java运行环境版本比编译时用的版本低,整理了原因和两种实际可用的处理方式。
记录使用 MinIO Java SDK 生成预签名 URL 的实践,包含下载和上传场景,以及一些容易出错的点。
记录一次排序 NPE 的排查和解决,顺便说下 IDEA 调试集合时 null 元素不显示的问题怎么调整。
记录 datetime 字段定义、插入、格式化查询以及 Java 端类型映射、时区等问题,避免线上踩坑。
想象一下从精确到极致的BigDecimal世界踏入“四舍五入”的Double领域。本文揭示Java数值转换的奥秘,解析精度损失的陷阱与范围限制的边界,助你明智选择,避免程序中的“财务黑洞”。