You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建仅含-1和1的整数自定义类?求枚举实现方案

实现仅包含-1和1的自定义类型

你当前写的PlusOrMinusOne类只是定义了两个私有整数变量,既没法生成代表1或-1的实例,也限制不了外部使用其他整数值,完全达不到需求。

最适合这种固定有限可选值场景的方案是枚举(enum),下面是具体实现和用法:

枚举实现方式

public enum Sign {
    // 定义两个枚举常量,分别对应1和-1
    PLUS_ONE(1),
    MINUS_ONE(-1);

    // 存储对应的整数值
    private final int value;

    // 私有构造方法,只能在枚举内部初始化常量
    Sign(int value) {
        this.value = value;
    }

    // 提供获取对应整数值的方法
    public int getValue() {
        return value;
    }
}

枚举的使用示例

  • 直接引用常量:
    Sign positive = Sign.PLUS_ONE;
    Sign negative = Sign.MINUS_ONE;
    
  • 获取对应的整数值:
    int posValue = positive.getValue(); // 返回1
    int negValue = negative.getValue(); // 返回-1
    
  • 用于条件判断或switch语句:
    public void processSign(Sign sign) {
        switch(sign) {
            case PLUS_ONE:
                System.out.println("处理+1逻辑");
                break;
            case MINUS_ONE:
                System.out.println("处理-1逻辑");
                break;
        }
    }
    

备选方案:自定义封装类

如果不想用枚举,也可以通过私有构造方法+静态实例的方式实现:

public class PlusOrMinusOne {
    // 对外暴露仅有的两个实例
    public static final PlusOrMinusOne PLUS_ONE = new PlusOrMinusOne(1);
    public static final PlusOrMinusOne MINUS_ONE = new PlusOrMinusOne(-1);

    private final int value;

    // 私有构造方法,禁止外部创建新实例
    private PlusOrMinusOne(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

使用时直接调用PlusOrMinusOne.PLUS_ONE或PlusOrMinusOne.MINUS_ONE即可,同样能保证只有这两个合法实例存在。

整体来说,枚举是更推荐的方案,它自带序列化安全、switch支持、默认toString实现等特性,比自定义封装类更简洁规范。

内容的提问来源于stack exchange,提问作者Saurav Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:25:25