2012-11-05 116 views
1

我写了下面的java代码,我预计编译器会抱怨它。但我没有得到任何错误。为什么是这样 ?编译器不会抱怨返回类型。为什么?

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

     ba.fetchSomeValues(); 

    } 

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

} 

我打电话的方法fetchSomeValues()应返回“你好”(这是一个字符串),并在main方法我已经包括ba.fetchSomeValues();没有它初始化为String变量。编译器不会抱怨这是为什么?

+4

因为这不是问题。 – Boann

回答

10

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

尽管通常不建议放弃方法的某个返回值。

一个计数器示例可能是Mapput方法,该方法返回与密钥关联的先前值。如果你不在乎是否有以前的值,那么你只需忽略返回值。

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

所以简而言之,编译器不能告诉你是否在意返回值。 这只是一个问题,如果该值在您使用该方法的上下文中显着且您忽略它

+3

“Map”示例的+1。 – sp00m

+1

地图的放置是为什么规则是这样的一个很好的例证。有些方法主要是为了副作用而调用的,比如向地图添加键值对,但可能有一些呼叫者可能使用的潜在有用信息。返回该信息是可以的,而那些不需要它的呼叫者可以忽略它。 –

2

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

5

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

2

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

你应该真的问自己,我想用一种强制我分配每个返回值的语言吗?这是一种方便的语言吗?

+0

我永远不会使用一种需要我使用返回值的语言(除非,例如,它将带有副作用的函数从具有返回值的函数中分离出来,在这种情况下,我有一个完整的问题)因为代码会被散布在'String d = someMethod(); int d_ = someOtherMethod(); double d__ = yetAnother();' –

2

ba.fetchSomeValues();不返回字符串"Hello",但因为你是不会得到任何左VAR(例如String s = ba.fetchSomeValues();),字符串对象,具有"Hello"值,在fetchSomeValues()方法创建,刚得到未使用

2

这段代码没有错。 fetchSomeValues()返回一个字符串,但不必分配值。 通常情况下,你可以写String returnsValue = a.fetchSomeValues(),但它不是必需的,因为它不是问题。

相关问题