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
改为type
int
,即

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
(或反之亦然)是否有任何目的?

编写代码是为了做两件事:

  • 解决一些问题(例如实现计数器并提供对该计数器内部状态的访问)
  • 向人类读者传达你的意图
您可以决定使用void来表示调用increment()并不是为了让您了解当前计数器计数。您可以使用int返回类型告诉读者该方法也提供了该信息。但是在第二种情况下,您也可以将方法名稍微更改为“incrementAndGet()”

当您查看类似这样的类时,您会发现模式“做点什么并返回新状态”非常常见


是的,从结果中返回一个值可能会被视为违反srp,但正如我的示例所示,有时稍微偏离是有帮助的,或者实际上是强制性的

编写代码可以完成两件事:

  • 解决一些问题(例如实现计数器并提供对该计数器内部状态的访问)
  • 向人类读者传达你的意图
您可以决定使用void来表示调用increment()并不是为了让您了解当前计数器计数。您可以使用int返回类型告诉读者该方法也提供了该信息。但是在第二种情况下,您也可以将方法名稍微更改为“incrementAndGet()”

当您查看类似这样的类时,您会发现模式“做点什么并返回新状态”非常常见


是的,从结果中返回一个值可能会被视为违反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