2012-11-05 118 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(),但它不是必需的,因爲它不是問題。

相關問題