编译器不会抱怨返回类型。为什么?

时间:2012-11-05 16:39:21

标签: java compilation

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

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

        ba.fetchSomeValues();

    }

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

}

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

6 个答案:

答案 0 :(得分:10)

您不必为变量指定返回值。你不必对它们做任何事情。

虽然通常不建议只删除某个方法的某些返回值。

计数器示例可能是Map的{​​{1}}方法,它返回与密钥关联的先前值。如果您不关心是否存在先前的值,则只需忽略返回值。

put

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

答案 1 :(得分:5)

这对于忽略方法的返回值是绝对有效的(尽管并不总是建议)。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

这种行为并非特定于Java,它实际上是当今所有主流(甚至那些不太常见)语言的标准。即使在FP语言中,重点是无副作用的函数,其唯一的点就是返回值,这是允许的。

你应该问自己,我是否想使用一种迫使我分配每个回报值的语言?这是一种方便的语言吗?

答案 4 :(得分:2)

ba.fetchSomeValues(); 会返回字符串 "Hello",但由于您没有 left var (例如String s = ba.fetchSomeValues(); ),具有"Hello"值的字符串对象,在fetchSomeValues()方法中创建,只是未使用

答案 5 :(得分:2)

此代码没有错。 fetchSomeValues()返回一个字符串,但您不必分配该值。 通常你可以编写String returnedValue = a.fetchSomeValues()但是没有必要