Java Enum相关问题

时间:2014-03-16 15:14:07

标签: java enums

有人可以回答以下问题吗?

  1. 我可以使用逻辑运算符而不是枚举值吗? 例如:

    enum Days {
        MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7)
    }
    

    现在可以使用if(Days.SUNDAY > Days.MONDAY) ....?

  2. 是否有任何进程可以为枚举指定一系列值? 例如,我想指定考试的有效数字应该在1到100之间。 所以,如果我想声明一个枚举,那么就像这样 - > enum Validno{ONE(1),TWO(2),....,HUNDRED(100)} 现在是否有任何选项可以声明包含每个值的枚举,并将它们指定为范围而不是单独声明每个值?

    • 提前致谢。

3 个答案:

答案 0 :(得分:1)

对于#1,您可以使用如下的序数方法

enum Day {
MON, TUE, WED, THU, FRI, SAT, SUN
}

public class EnumExample {
public static void main(String[] args) {
    System.out.println(Day.MON.ordinal() < Day.TUE.ordinal()); // Prints true
    System.out.println(Day.MON.ordinal() > Day.TUE.ordinal()); // Prints false
}
}
#p>#2:为什么要使用枚举?你可以简单比较一下。 例如:

if(marks > 0 && marks < 100)

答案 1 :(得分:1)

对于#1,是的,可以使用compareTo方法。

你可以这样做:

enum Days {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

public static void main(String[] args) {
    System.out.println(Days.Monday.compareTo(Days.Sunday));     // Returns negative value
    System.out.println(Days.Thursday.compareTo(Days.Tuesday));  // Returns positive value
    System.out.println(Days.Tuesday.compareTo(Days.Tuesday));   // Returns zero
}

对于#2, 我不认为这是一种以编程方式声明枚举的方法。如果你想使用枚举,你必须列出一个到百倍。

相反,为什么不宣布一个检查给定分数是否有效的函数? 它可能是这样的:

public boolean isValid(int score){
    return score>=0 && score<=100;
}

答案 2 :(得分:1)

作为第二个问题的替代方案,您可以简单地使用常规课程:

public final class Score implements Comparable<Score> {
    private final int value;

    public Score(int value) {
        if (value < 0 || value > 100) {
            throw new IllegalArgumentException("score value must be between 0 and 100");
        } 
        this.value = value;
    } 

    public int getValue() {
        return value;
    }

    // equals, hashCode and compareTo omitted, but should be there
}

这为您提供了枚举的类型安全性,而无需单独声明每个101值。没有人能够创建一个价值不正确的分数。