为什么java.lang.Integer不公开其私有值字段?

时间:2016-12-12 16:58:27

标签: java thread-safety

据我了解,publicfinal字段实际上是一个只读字段。因此,暴露它不会影响java.lang.Integer的不变性。

我知道我可以通过intValue()访问该值,并且一旦JIT启动并内联方法调用,性能就无所谓了。但是,一般来说,public final int value中是否有某些线索原因或某些内容没有java.lang.Integer

2 个答案:

答案 0 :(得分:0)

不是线程,而是OOP。 int是值类型,Integer是对象。在面向对象编程(OOP)中,您不应该公开对象的字段,而应该创建公共方法,即getter和setter。

即使对于常量/只读字段,这也是一种很好的做法。考虑封装,如果您公开方法intValue(),您仍然可以返回int值,即使其背后的实现,这里是支持字段{{1} },由于某种原因而更改,或者为检查,验证或其他任何内容添加其他逻辑。如您所见,支持字段是实现细节,用户不应该看到它。

答案 1 :(得分:0)

Integer.java扩展Number.java这是一个抽象类。其中一个抽象方法是

public abstract int intValue();

抽象定义了实现类必须遵守的联系人。因此Integer.java提供了该方法的实现。现在,如果此方法已经存在,那么隐藏字段并仅提供intValue()作为获取字段值的方法将成为显而易见的选择。两者都可以访问会增加混乱。

另一个原因是定期推出新版本的Java。语言开发人员尽力向后兼容,想象一下今天你正在使用该字段,明天决定在返回值之前进行一些逻辑操作或检查完成。现在如果可以访问直接字段那么就很难实现。