java - 仅使用 getter 修改私有(private)类属性

标签 java getter

我读了这篇文章:Combination of getter and list modification in Java

现在我想知道是否只能通过 getter 访问来修改所有类型的类属性。 我尝试使用 Integer 对象

public class SomeClass
{
     private Integer someInteger = 9;
     public Integer getSomeInteger()
     {
         return someInteger;                          // id = 18, value =  9
     }
}

现在我尝试修改另一个类中的 someInteger:

SomeClass someClass = new SomeClass();
Integer someInteger = someClass.getSomeInteger();     // id = 18, value =  9
someInteger += 1;                                     // id = 26, value = 10
Integer anotherInteger = someClass.getSomeInteger();  // id = 18, value =  9

使用调试器检查对象 ID。在我的调用类中,someInteger 首先具有与 getter 中相同的 ID。加1后,someInteger得到一个新的id,原来的class属性没有被编辑。

好吧,我尝试添加数字失败了,但是是否有可能修改原始对象?

我问我带有列表的链接示例和带有整数的示例之间的区别。 我的想法是,

someInteger += 1; 

在内部创建一个新的 Integer 对象。相反,列表有自己的修改方法,这不会导致新的 List 对象的实例化。这是正确的吗? 由此可见,我可以通过 getter 访问的具有自修改方法的所有数据类型都必须受到保护,以免被其他类修改?

最佳答案

您的问题是您没有实现正确的 setter ,并且Integer是不可变的。

因此,现在递增 someInteger 时所做的就是递增引用 someInteger 的值,该值的作用域为执行增量的方法,而不影响私有(private) field 。

setter 方法接受一个参数,并且在验证后(如果适用)在内部设置字段的值。

所以你的 setter 应该看起来像:

public void setSomeInteger(int value) {
    // TODO validate if applicable
    someInteger = value;
}

然后您将调用它:

someClassInstance.setSomeInteger(42);

关于java - 仅使用 getter 修改私有(private)类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014366/

相关文章:

java - Android - 使用 AudioManager 播放/暂停音乐?

Java : Drawing using a two dimensional array as a grid

java - C3P0 一台服务器多个数据库

Java轻松快速地创建实例getter

c# - 分配对象时如何防止模型属性的延迟加载?

javascript - 使用 SoundCloud Getter

java - 工厂模式: How to access properties of concrete product classes from client?

java - 使用带有静态变量的随机 getter

java - 为什么这个空指针异常不断出现?我最后写了错误。我还提到了发生错误的行

java - 如何使用 GroupLayout 来缩进?