Joe*_*Joe 25 java enums scjp ocpjp
如果枚举实现了Comparable,为什么无法与<或>进行比较?
public class Dream
{
public static void main(String... args)
{
System.out.println(PinSize.BIG == PinSize.BIGGER); //false
System.out.println(PinSize.BIG == PinSize.BIG); //true
System.out.println(PinSize.BIG.equals(PinSize.BIGGER));//false
System.out.println(PinSize.BIG > PinSize.BIGGERER);// compilation error
//can't be compared
System.out.println(PinSize.BIG.toString().equals(PinSize.BIGGER));// #4
PinSize b = PinSize.BIG ;
System.out.println( b instanceof Comparable);// true
}
}
enum PinSize { BIG, BIGGER, BIGGERER };
Run Code Online (Sandbox Code Playgroud)
Ósc*_*pez 43
你可以这样做:
PinSize.BIGGEST.ordinal() > PinSize.BIG.ordinal() // evaluates to `true`
Run Code Online (Sandbox Code Playgroud)
当然,假设在枚举之后BIGGEST 声明了.枚举中的序数值隐含地与声明顺序相关联,默认情况下,第一个值为赋值,第二个值为依此类推. BIG01
所以,如果哟声明这样的枚举,事情会起作用:
public enum PinSize {
SMALLEST, // ordinal value: 0
SMALL, // ordinal value: 1
NORMAL, // ordinal value: 2
BIG, // ordinal value: 3
BIGGER, // ordinal value: 4
BIGGEST; // ordinal value: 5
}
Run Code Online (Sandbox Code Playgroud)
Joa*_*uer 18
实施并不意味着你可以使用或.您只能使用具有数值的那些.Comparable <>
实现Comparable意味着有一种compareTo()方法.试试这个:
System.out.println(PinSize.BIG.compareTo(PinSize.BIGGER));
Run Code Online (Sandbox Code Playgroud)
该compareTo()方法将返回int小于,等于或大于0的方法,具体取决于哪个值为"更大".在enum值的情况下,"大小"取决于枚举值定义的顺序.
| 归档时间: |
|
| 查看次数: |
20674 次 |
| 最近记录: |