我正在equals(Object obj)
为一个类编写一个函数。我看到可以obj
从调用者访问私有字段。所以不要使用吸气剂:
Odp other = (Odp) obj;
if (! other.getCollection().contains(ftw)) {
}
我可以直接访问该字段:
Odp other = (Odp) obj;
if (! other.collection.contains(ftw)) {
}
这是不好的做法吗?
我倾向于总是使用吸气剂,因为有时吸气剂不仅仅是“return(foo)”。有时,如果它们为空,它们会初始化事物,或者在其中进行一些调试日志记录,或者以某种方式验证当前状态。它更加一致。
不,这不对。私有变量和方法无法从其他类访问的原因是允许您更改类的内部,而不必更改使用该类的所有代码(以及防止您的类的用户设置变量)到一个它不应该有的值)。
如果您使用其他对象的私有变量不会造成任何伤害,因为如果您要重构类的内部结构,那么无论如何您都必须更改类内部的代码。
我不认为这是不好的做法,而是语言的一个特点。它不仅允许您测试您equals
的工作方式,而且在创建对象的原型模式中也很有用。
这很好,完全正常。this
认为可以摆弄 的私有字段有点奇怪other
,但这没关系,因为就某些第三方能够弄脏Odp
对象的内部结构而言,不可能发生任何不好的事情。类的任何方法都Odp
可以修改任何Odp
对象的任何私有成员,甚至是非私有成员this
,但这很好,因为任何此类方法显然都可以信任!
这是一个重复
为什么我可以在我的 equals(Object o) 方法中直接访问“其他”对象的私有变量
该类的任何实例都可以访问私有数据,即使 A 类的一个实例正在访问 A 的另一个实例的私有成员。重要的是要记住访问修饰符(私有、受保护、公共)控制的是类访问,而不是实例访问
对实体类使用私有成员可能会导致代理类工作不正确。想象一下休眠通过惰性查询创建类。如果检查成员变量,则返回 null。但是如果您调用 get() ,它将从数据库中获取数据并初始化该字段。