Java中的枚举实现了Comparable接口。 重写Comparable的compareTo方法会很好,但是在这里它被标记为final。 Enum的compareTo上的默认自然顺序是列出的顺序。 有谁知道为什么Java枚举有这个限制吗?
我为像这样的简单类实现了compareTo()方法(能够使用Collections.sort()以及Java平台提供的其他好东西): public class Metadata implements Comparable<Metadata> { private String name; private String value; // Imagine basic constructor and accessors here // Irrelevant parts omitted } 我想这些对象的自然顺序是:1)按名称sorting,2)如果名称相同,则按值sorting; 这两个比较应该是不区分大小写的。 对于这两个字段,空值是完全可以接受的,所以在这种情况下, compareTo不能中断。 想到的解决scheme是沿着以下线(我在这里使用“守卫子句”,而其他人可能更喜欢单一的返回点,但这是旁边的点): // primarily by name, secondarily by value; null-safe; case-insensitive public int compareTo(Metadata other) { if (this.name == null && other.name != null){ return -1; } […]
考虑简单的testing类: import java.math.BigDecimal; /** * @author The Elite Gentleman * */ public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub BigDecimal x = new BigDecimal("1"); BigDecimal y = new BigDecimal("1.00"); System.out.println(x.equals(y)); System.out.println(x.compareTo(y) == 0 ? "true": "false"); } } 你可以(有意识地)说x等于y (不是对象引用),但是当你运行这个程序时,下面的结果显示: false true 问题: […]
当在Java中testingString的平等时,我总是使用equals()因为对我来说这似乎是最自然的方法。 毕竟,它的名字已经说明了它打算做什么。 不过,我最近告诉我的一位同事被教导使用compareTo() == 0而不是equals() 。 这感觉不自然(因为compareTo()是为了提供一个sorting而不是比较的相等),甚至有点危险(因为compareTo() == 0并不一定意味着在所有情况下都是平等的,即使我知道它对于String ' s)给我。 他不知道为什么他被教会使用compareTo()而不是equals()来处理String ,而且我也找不到任何理由。 这真的是个人品味的问题,还是有任何方法的真正原因?
在我的程序中创build了一个固定长度[7]的数组fClasses ,每个对象都是一个包含3个Strings ,一个int和一个int[]的类FClass 。 这些值是从.txt文件读取的,并根据int的值添加到数组的特定索引。 .txt文件中的条目较less,因此数组中有索引,因此数组最终看起来像这样: fClasses[0] { str1, str2, str3, int1, int [] {1,2,3,4,5}} fClasses[1] { str1, str2, str3, int1, int [] {1,2,3,4,5}} fClasses[2] { str1, str2, str3, int1, int [] {1,2,3,4,5}} fClasses[3] null fClasses[4] null fClasses[5] { str1, str2, str3, int1, int [] {1,2,3,4,5}} fClasses[6] { str1, str2, str3, int1, int [] {1,2,3,4,5}} […]