如何创建仅含-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
相关产品推荐
相关产品推荐

