2013-04-20 81 views
8

我正在經歷的commons-chain在Java方法簽名,返回類型extends關鍵字

的代碼,我發現了很多方法簽名類似的這一個:

public <CMD extends Command<K, V, C>> CMD getCommand(String commandID)

這是怎麼簽名有什麼不同來自:

public Command getCommand(String commandID)

唯一合乎邏輯的理由我可以理解的是做類型檢查。但我仍然無法弄清楚從設計角度來看它的原因。

是否有更多的原因爲什麼會使用和擴展在Java方法的返回類型?

回答

4

所不同的是三倍:

  1. 返回的類型是鍵入(不是原始類型)
  2. 返回可以是一個特定的子類
  3. 的方法訪問該類型的類型K,V和C

併成爲一個類型化的方法,Java可以推斷出類型

所有這意味着這將編譯(沒有強制轉換):

Command<String, Integer, String> x = getCommand(commandID); 

SomeTypedSubClassOfCommand x = getCommand(commandID); 

編譯器將推斷(即找出)基於所述變量的類型的方法的類型結果被分配給。

另外,你可以明確地指定使用這種語法子類:

Command<String, Integer, String> x = ContainingClass.<CommandSubClass<String, Integer, String>>getCommand(commandID); 
+0

感謝。只是我正在尋找的澄清。 – shoubhik 2013-04-21 18:34:00