整数包装问题:构造函数实现疑问求助
分析你的Integer包装类代码问题
让我来帮你拆解这段代码里的几个问题,以及如何优化它:
1. 不必要的Integer实例创建(已废弃的构造器)
你在构造函数里写了this.object = new Integer(object);,但其实完全没必要这么做:
- Integer是不可变类,传入的
object参数本身就是一个Integer实例,直接赋值this.object = object;就足够了,不会有线程安全或者被意外修改的风险。 - 更关键的是,
new Integer(int)这个构造器从Java 9开始就被标记为**废弃(@Deprecated)**了,官方推荐使用Integer.valueOf(int)或者直接利用自动装箱机制来创建Integer实例,而非通过构造器。
2. 未实现Rateable接口的方法
你的类声明了implements Rateable,但代码里完全没有实现这个接口要求的抽象方法。这会直接触发编译错误——Java强制要求实现接口必须覆盖所有抽象方法。
假设Rateable接口的定义类似这样:
public interface Rateable { void setRating(int rating); int getRating(); }
那你必须在IntegerRateable里实现这两个方法,或者把类改成抽象类(但这样就无法直接实例化对象了)。
3. 核心包装功能缺失
如果你的目标是给Integer添加“可评分”的扩展功能,当前代码只是简单持有了一个Integer对象,完全没有把评分逻辑和Integer关联起来。你需要额外添加存储评分的字段,以及对应的操作方法。
修正后的示例代码
public class IntegerRateable implements Rateable { private final Integer value; // 用final修饰不可变字段,提升安全性 private int rating; // 存储评分的专属字段 // 提供两种构造器,支持接收Integer或int类型,更灵活 public IntegerRateable(Integer value) { this.value = value; // 直接赋值,无需重复创建Integer实例 } public IntegerRateable(int value) { this.value = Integer.valueOf(value); // 使用官方推荐的实例创建方式 } // 实现Rateable接口的强制方法 @Override public void setRating(int rating) { this.rating = rating; } @Override public int getRating() { return rating; } // 添加获取包装的Integer值的方法 public Integer getValue() { return value; } }
额外小建议
- 如果不需要修改包装的Integer值,给
value字段加上final修饰符,既符合不可变类的设计原则,也能避免后续意外赋值的问题。 - 同时支持
int和Integer类型的构造器,可以让用户使用起来更便捷,无需手动处理装箱操作。
内容的提问来源于stack exchange,提问作者John Terry
相关产品推荐
相关产品推荐

