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()似乎更符合我的情况。