在Java Enum中使用某种范围

时间:2019-02-14 18:47:29

标签: java enums range

我可以用特定的int值定义枚举值,但我也想表示Java枚举中的某些特定范围。我的意思是:

public enum SampleEnum {
    A(1),
    B(2),
    C(3),
    D(4),
    //E([5-100]);

    private SampleEnum(int value){
        this.value = value;
    }

    private final int value;
}

例如,这里可以用一个值(在这里为“ E”)表示5到100之间的范围吗?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

数字5和100是两个不同的值,因此在这里无法存储一个值。

但是在枚举中定义两个值很容易,即低值和高值。对于范围仅为1的那些,请将上限和下限都设置为相同的值。

enum SampleEnum {
    A(1),
    B(2),
    C(3),
    D(4),
    E(5, 100);

    private SampleEnum(int value){
        this.low = value;
        this.high = value;
    }
    private SampleEnum(int low, int high) {
        this.low = low;
        this.high = high;
    }

    private final int low;
    private final int high;
}

答案 1 :(得分:0)

似乎您实际上正在处理所有枚举的范围。 Provider.of<AuthService>(context); 与其余字符之间的唯一区别是,其余字符在该范围内只有一个值。

我将枚举更改为采用E或某种low/high对象。

这是一个使用Range的示例,由于能够在IntStream.range功能中使用其所有不错的构建,因此我很喜欢它。

IntStream

这是检查数字是否在范围内的用法示例:

public enum SampleEnum {
    A( () -> IntStream.range(1, 2) ),
    B( () -> IntStream.range(2, 3) ),
    C( () -> IntStream.range(3, 4) ),
    D( () -> IntStream.range(4, 5) ),
    E( () -> IntStream.range(5, 101) );

    private Supplier<IntStream> rangeFactory = null;

    private SampleEnum(Supplier<IntStream> rangeFactory){
        this.rangeFactory = rangeFactory;
    }

    public IntStream getRange() {
        return rangeFactory.get();
    }
}