1

我编写了以下 java 代码,我希望编译器会抱怨它。但我没有收到任何错误。为什么是这样 ?

    public static void main(String[] args) {
        Ba ba = new Ba();

        ba.fetchSomeValues();

    }

    public String fetchSomeValues(){
        return "Hello";     
    }

}

我正在调用fetchSomeValues()应该返回“Hello”(这是一个字符串)的方法,并且在我包含的主要方法中ba.fetchSomeValues();没有将其初始化为String变量。编译器不会抱怨这是为什么?

4

6 回答 6

10

您不必将返回值分配给变量。你根本不需要对他们做任何事情。

尽管通常不建议只删除方法的某些返回值。

一个反例可能是Map'sput方法,它返回与键关联的先前值。如果您不关心是否存在先前的值,则只需忽略返回值。

Map<Integer, String> map = new HashMap<Integer, String>();
test.put(1, "one"); // we don't assign the return value since we don't care

因此,简而言之,编译器无法判断您是否关心返回值。如果值在您使用该方法的上下文中很重要并且您忽略它,这只是一个问题

于 2012-11-05T16:41:19.067 回答
5

忽略方法的返回值是绝对有效的(尽管并不总是推荐)。

于 2012-11-05T16:41:00.850 回答
2

在 Java 中,您可以忽略刚刚发现的返回值。

于 2012-11-05T16:40:56.120 回答
2

这种行为并不是 Java 特有的,它实际上是当今所有主流(甚至那些不那么主流)语言的规范。即使在 FP 语言中,重点是无副作用的函数,其唯一点是返回值,这也是允许的。

You should really ask yourself, Do I want to use a language that forces me to assign every return value? Would that be a convenient language to use?

于 2012-11-05T16:41:50.707 回答
2

ba.fetchSomeValues(); does return the string "Hello", but since you ain't got any left var (for example String s = ba.fetchSomeValues();), the object of string, that has the "Hello" value, created in the fetchSomeValues() method, just get unused.

于 2012-11-05T16:43:45.003 回答
2

There's nothing wrong in this code. fetchSomeValues() returns a string but you don't have to assign the value. Normally you can write String returnedValue = a.fetchSomeValues() but it is not necessary

于 2012-11-05T16:45:03.333 回答