据我了解,public
和final
字段实际上是一个只读字段。因此,暴露它不会影响java.lang.Integer
的不变性。
我知道我可以通过intValue()
访问该值,并且一旦JIT启动并内联方法调用,性能就无所谓了。但是,一般来说,public final int value
中是否有某些线索原因或某些内容没有java.lang.Integer
?
答案 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。语言开发人员尽力向后兼容,想象一下今天你正在使用该字段,明天决定在返回值之前进行一些逻辑操作或检查完成。现在如果可以访问直接字段那么就很难实现。