有沒有在Java中的方法來聲明一個方法參數,那就是某種集合,但有限的尺寸?java方法參數可以是聲明大小的集合嗎?
例如,是這樣的:
public Car(String colour, Wheel[4])
這表明汽車可以構造一個給定顏色和正好4個輪子。 (顯然這個特殊的例子可以通過改變枚舉方法來實現,通過4個輪子作爲單獨的參數,但是這並不能縮放)
看起來這些類型的約束應該可以通過方法頭來表達,但我只是不能認爲java將如何允許它。
有沒有在Java中的方法來聲明一個方法參數,那就是某種集合,但有限的尺寸?java方法參數可以是聲明大小的集合嗎?
例如,是這樣的:
public Car(String colour, Wheel[4])
這表明汽車可以構造一個給定顏色和正好4個輪子。 (顯然這個特殊的例子可以通過改變枚舉方法來實現,通過4個輪子作爲單獨的參數,但是這並不能縮放)
看起來這些類型的約束應該可以通過方法頭來表達,但我只是不能認爲java將如何允許它。
沒有,有沒有在類型系統,讓這一點。當然,您可以在執行時進行驗證 - 這是您通常必須執行的操作,否則語言將很難提供規則,確保數組長度完全正確。 (如在.NET代碼合同項目將允許這樣的事情來表達,但是這不是語言本身的一部分...等並不需要精確規範。)
號檢查參數在運行時快速失敗的:
public Car(String colour, Wheel[] wheels){
if (wheels == null)
throw new NullPointerException("The wheels is null.");
if (wheels.length != 4)
throw new IllegalArgumentException("The length of wheels is "+wheels.length);
...
}
您可以通過創建特定的目錄中新類包裝Wheel[4]
。現在
可以使用cofoja - http://code.google.com/p/cofoja/這和其他這樣的輸入/輸出限制。
@Requires("wheels.length == 4")
public Car(String colour, Wheel[] wheels)
合同,http://code.google.com/p/cofoja – ide 2011-02-05 08:51:52
*咳嗽* ADA或PASCAL說起? *咳嗽* – 2011-02-05 08:58:43