Java void和int类型的方法的结果相同,使用哪种方法?
我有以下主要课程:Java void和int类型的方法的结果相同,使用哪种方法?,java,Java,我有以下主要课程: public class Test { public static void main(String[] arg) { Counter counter1; Counter counter2; counter1 = new Counter(); counter2 = new Counter(); counter1.increment(); counter2.increme
public class Test {
public static void main(String[] arg) {
Counter counter1;
Counter counter2;
counter1 = new Counter();
counter2 = new Counter();
counter1.increment();
counter2.increment();
counter2.increment();
System.out.println(counter1.getValue());
System.out.println(counter2.getValue());
}
}
类计数器
:
public class Counter {
private int count;
public Counter() {
count = 0;
}
public void increment() {
count++;
}
public int getValue() {
return count;
}
}
我得到了结果(分别来自计数器1和计数器2):
但是如果我改为将方法increment
改为typeint
,即
public class Counter {
private int count;
public Counter() {
count = 0;
}
public int increment() {
return count++;
}
public int getValue() {
return count;
}
}
我得到了同样的结果:
1
2
我知道
void
不会返回任何值,但是,在本例中使用void
覆盖int
(或反之亦然)是否有任何目的?编写代码是为了做两件事:
- 解决一些问题(例如实现计数器并提供对该计数器内部状态的访问)
- 向人类读者传达你的意图
是的,从结果中返回一个值可能会被视为违反srp,但正如我的示例所示,有时稍微偏离是有帮助的,或者实际上是强制性的 编写代码可以完成两件事:
- 解决一些问题(例如实现计数器并提供对该计数器内部状态的访问)
- 向人类读者传达你的意图
是的,从结果中返回一个值可能会被视为违反srp,但正如我的示例所示,有时稍微偏离是有帮助的,或者实际上是强制性的 这里使用“int”没有意义,因为您是用另一个方法获得count的值。如果没有“getValue”方法,则需要使用“int”来获取值。
但是,因为您有“getValue”方法,所以不应该使用“int”,因为这违反了“单一责任原则”。在这里使用“int”没有意义,因为您是用另一种方法获取count的值。如果没有“getValue”方法,则需要使用“int”来获取值。
但是,因为您有“getValue”方法,所以不应该使用“int”,因为它违反了“单一责任原则”。这是一个危险的代码:
public int increment(){return count++;}
,因为您在count未递增之前就返回它,这可能会导致混淆。最好返回++计数
如果你想这样做,你是在试图分别重新发明轮子吗?这是一个危险的代码:public int increment(){return count++;}
因为你在count被递增之前返回count,这可能会引起混乱。最好返回++计数代码>如果你想这样做,你是想分别重新发明轮子吗?不一定。从操作本身获取累积值,而不是强制用户在操作之后调用get,这可能对您很有用。我已经学会了始终使用getter和setter方法来操作另一个类中的值。我同意您的观点,您可以使用返回类型int
立即返回新值,但我认为这应该是一个私有方法,并且只能在同一个类中使用。更好的教训是:既不要使用getter,也不要使用setter。内部状态不应该如此容易获得(在一定程度上)。获得者可能会违反“告诉-不要问”的规定,而二传者则是进入黑暗深渊的第一步:-)不一定。从操作本身获取累积值,而不是强制用户在操作之后调用get,这可能对您很有用。我已经学会了始终使用getter和setter方法来操作另一个类中的值。我同意您的观点,您可以使用返回类型int
立即返回新值,但我认为这应该是一个私有方法,并且只能在同一个类中使用。更好的教训是:既不要使用getter,也不要使用setter。内部状态不应该如此容易获得(在一定程度上)。获得者可能会违反“告诉-不要问”的规定,而二传者则是进入黑暗深渊的第一步:-)非常欢迎你。你的积极反馈总是让人觉得很荣幸:-)非常欢迎你。您的积极反馈总是让人觉得很荣幸:-)
1
2