在示例中使用 setter 方法和简单地声明一个变量有什么区别?
What is the difference between using a setter method and simply declaring a variable in the example?
我只是想知道,使用 setter 方法 setLocationCells
和简单地声明一个名为 locationCells
且值为 {2,3 的 int 数组有什么区别,4}?
这里是使用setter方法的代码(第一个class是主要的class):
public static void main(String[] args) {
SimpleDotCom dot = new SimpleDotCom();
int[] locations = {2,3,4}; // these are the location cells we will pass in
dot.setLocationCells(locations); // locationCells now 2,3,4
String userGuess = "2";
String result = dot.checkYourself(userGuess);
}
第二个class:
int[] locationCells;
int numOfHits = 0;
public void setLocationCells(int[] locs) {
locationCells = locs;
}
public String checkYourself(String stringGuess) {
int guess = Integer.parseInt(stringGuess);
String result = "miss";
for (int cell : locationCells) {
if (guess == cell) {
result = "hit";
numOfHits++;
break;
}
}
if(numOfHits == locationCells.length) {
result = "kill";
}
System.out.println(result);
return result;
}
现在,没有 setter 方法:
public static void main(String[] args) {
SimpleDotCom dot = new SimpleDotCom();
String userGuess = "2";
String result = dot.checkYourself(userGuess);
}
第二个class:
int[] locationCells = {2,3,4};
int numOfHits;
public String checkYourself(String stringGuess) {
int guess = Integer.parseInt(stringGuess);
String result = "miss";
for (int cell : locationCells) {
if (guess == cell) {
result = "hit";
numOfHits++;
break;
}
}
if(numOfHits == locationCells.length) {
result = "kill";
}
System.out.println(result);
return result;
}
感谢任何帮助,非常感谢!
由于您可以通过多种方式分配对象成员,使用 getters 和 setters 有助于简化 Class 内部结构与与之一起工作的内部结构之间的契约它。这只需公开一个接口并通常将 Class 成员声明为私有即可。
如果您稍后更改这些成员的分配方式,提供数据验证、转换,您不必担心更改分配它们的每个其他地方,您只需更新 setter 或 getter。您的示例似乎微不足道,正确,但是 setters 和 getters 有助于随着项目的增长降低复杂性。当您使用接口时,它提供了一个更安全的契约,因为您可以处理除数据类型之外的各种微妙条件,例如当值为 0 或成员引用为 null 时状态应该是什么。
这里的设计原则叫做encapsulation。
我只是想知道,使用 setter 方法 setLocationCells
和简单地声明一个名为 locationCells
且值为 {2,3 的 int 数组有什么区别,4}?
这里是使用setter方法的代码(第一个class是主要的class):
public static void main(String[] args) {
SimpleDotCom dot = new SimpleDotCom();
int[] locations = {2,3,4}; // these are the location cells we will pass in
dot.setLocationCells(locations); // locationCells now 2,3,4
String userGuess = "2";
String result = dot.checkYourself(userGuess);
}
第二个class:
int[] locationCells;
int numOfHits = 0;
public void setLocationCells(int[] locs) {
locationCells = locs;
}
public String checkYourself(String stringGuess) {
int guess = Integer.parseInt(stringGuess);
String result = "miss";
for (int cell : locationCells) {
if (guess == cell) {
result = "hit";
numOfHits++;
break;
}
}
if(numOfHits == locationCells.length) {
result = "kill";
}
System.out.println(result);
return result;
}
现在,没有 setter 方法:
public static void main(String[] args) {
SimpleDotCom dot = new SimpleDotCom();
String userGuess = "2";
String result = dot.checkYourself(userGuess);
}
第二个class:
int[] locationCells = {2,3,4};
int numOfHits;
public String checkYourself(String stringGuess) {
int guess = Integer.parseInt(stringGuess);
String result = "miss";
for (int cell : locationCells) {
if (guess == cell) {
result = "hit";
numOfHits++;
break;
}
}
if(numOfHits == locationCells.length) {
result = "kill";
}
System.out.println(result);
return result;
}
感谢任何帮助,非常感谢!
由于您可以通过多种方式分配对象成员,使用 getters 和 setters 有助于简化 Class 内部结构与与之一起工作的内部结构之间的契约它。这只需公开一个接口并通常将 Class 成员声明为私有即可。
如果您稍后更改这些成员的分配方式,提供数据验证、转换,您不必担心更改分配它们的每个其他地方,您只需更新 setter 或 getter。您的示例似乎微不足道,正确,但是 setters 和 getters 有助于随着项目的增长降低复杂性。当您使用接口时,它提供了一个更安全的契约,因为您可以处理除数据类型之外的各种微妙条件,例如当值为 0 或成员引用为 null 时状态应该是什么。
这里的设计原则叫做encapsulation。