Java 如何使用setter增加实例?

Java 如何使用setter增加实例?,java,getter-setter,Java,Getter Setter,我在一节简单的课上遇到了一个小问题 import java.util.Random; public class fileTest { private static Random rand = new Random();; private int randOne = rand.nextInt(10); private String strOne = String.format("%02d", this.randOne); public int getRandO

我在一节简单的课上遇到了一个小问题

import java.util.Random;

public class fileTest {

    private static Random rand = new Random();;
    private int randOne = rand.nextInt(10);
    private String strOne = String.format("%02d", this.randOne);

    public int getRandOne() {
        return randOne;
    }

    public void setRandOne(int randOne) {
        this.randOne = randOne +1;
    }

    public String getStrOne() {
        return strOne;
    }

}
我的“发射器”

我的想法是创建一个随机数并将其转换为字符串。 完成我的东西后,我需要增加我的字符串

但二传后的结果与开始时相同。我想我并不完全了解一个能手/二传手


有人能帮我理解我的错误吗?

这在创建实例时发生一次:

private String strOne = String.format("%02d", this.randOne);
更改
randOne
后,它不会自动再次运行。解决方案是完全删除
strOne
字段,并在getter中构造字符串:

public String getStrOne() {
    return String.format("%02d", this.randOne);
}
您不需要存储动态派生的值



您的方法
setRandOne
的行为与人们合理期望
set
方法的行为不匹配。与您的方法相同的方法可以描述为
setRandOneToOneHigherThan(int-value)
。或者你可以称它为
incrementRandOne()
,但是身体需要做
this.randOne=this.randOne+1(或
this.randOne++;
)。或者,您可以将其设置为普通setter,并在调用方法时执行递增操作:
fileA.setRandOne(fileA.getRandOne()+1)

这在创建实例时发生一次:

private String strOne = String.format("%02d", this.randOne);
更改
randOne
后,它不会自动再次运行。解决方案是完全删除
strOne
字段,并在getter中构造字符串:

public String getStrOne() {
    return String.format("%02d", this.randOne);
}
您不需要存储动态派生的值



您的方法
setRandOne
的行为与人们合理期望
set
方法的行为不匹配。与您的方法相同的方法可以描述为
setRandOneToOneHigherThan(int-value)
。或者你可以称它为
incrementRandOne()
,但是身体需要做
this.randOne=this.randOne+1(或
this.randOne++;
)。或者,您可以将其设置为普通setter,并在调用方法时执行递增操作:
fileA.setRandOne(fileA.getRandOne()+1)
私有字符串strOne=String.format(“%02d”,this.randOne)
这与
this.randOne
不作为变量绑定。而是在创建实例时(调用构造函数时)对其进行一次计算。然后它使用当前值
randOne
。它永远不会重新计算。
private String strOne=String.format(“%02d”,this.randOne)
这与
this.randOne
不作为变量绑定。而是在创建实例时(调用构造函数时)对其进行一次计算。然后它使用当前值
randOne
。永远不会重新计算。非常感谢!我听说你必须避免在getter中加入公式。我错了?@K.Asuus在getter中有一个公式是可以的(但它将是一个只读属性,对于该属性也有一个setter是很奇怪的)。使用getter和setter而不是直接访问字段的原因是,您可以向它们添加逻辑(并可能重写子类中的方法)。因此,将逻辑放在其中不应该是一个问题,但不要做人们从一个方法的名称中看不到的事情。哦,你是rigth@AndyTurner。在未来,最好避免像二传手那样的动作。incrementRandOne()似乎对我的情况更感兴趣。非常感谢!我听说你必须避免在getter中加入公式。我错了?@K.Asuus在getter中有一个公式是可以的(但它将是一个只读属性,对于该属性也有一个setter是很奇怪的)。使用getter和setter而不是直接访问字段的原因是,您可以向它们添加逻辑(并可能重写子类中的方法)。因此,将逻辑放在其中不应该是一个问题,但不要做人们从一个方法的名称中看不到的事情。哦,你是rigth@AndyTurner。在未来,最好避免像二传手那样的动作。incrementRandOne()似乎更符合我的情况。