我想創建一個抽象數組方法,它指定數組的這個抽象對象只能容納3個項目。java中設置長度數組的抽象方法?
現在我已經嘗試做這樣的事情public abstract BaseAdapter[3] adapters();
,但它抱怨一個錯誤,它不能這樣做。
是他們的另一種方式,還是我需要做public abstract BaseAdapter[] adapters();
?
,將工作正常,但子類仍然可以傳遞一個數組比3項
我想創建一個抽象數組方法,它指定數組的這個抽象對象只能容納3個項目。java中設置長度數組的抽象方法?
現在我已經嘗試做這樣的事情public abstract BaseAdapter[3] adapters();
,但它抱怨一個錯誤,它不能這樣做。
是他們的另一種方式,還是我需要做public abstract BaseAdapter[] adapters();
?
,將工作正常,但子類仍然可以傳遞一個數組比3項
你可以解決這個問題是這樣的:
創建一個抽象的輔助方法(你可以重寫)返回類型爲BaseAdapter[]
protected abstract BaseAdapter[] createAdapters();
命名createAdapters()
在你有你的超一流a 最後的方法adapters
做以下事情:
public final BaseAdapter[] adapters() {
BaseAdapter[] adapters = createAdapters();
if (adapters.length != 3)
throw new Exception("Error: Please return 3 adapters.");
return adapters;
}
另一種方法是創建包含三個BaseAdapters稱爲BaseAdapterTriple
(或許還有一個更描述性的名稱)的簡單類,並使用它作爲返回值。
大你似乎誤解Java中的abstract
修改的意義。
abstract
適用於類和方法,不田/變量,所以你想不能工作的。
請描述你想要完成的,然後我們可以幫助:-)。
參見例如http://download.oracle.com/javase/tutorial/java/IandI/abstract.html有關abstract
的解釋。
據我所知,沒有辦法在方法簽名中的對象上設置限制。在實現方法中使用異常,或使用自定義類。
不,你不能用數組和列表來做到這一點。如果數量超過3,則可以拋出異常並記錄此行爲。
如果你想要一個adapters()
方法,它最多隻能和有子類返回3 BaseAdapter
實施「迴歸」本身,同時尊重3max合同,你應該做的驗證在你adapters()
方法,並調用一個abstract
方法。
例如:
abstract class YourAbstractClass{
public BaseAdapter[] adapters(){
BaseAdapter[] adapters = internalAdapters();
if(adapters.length > 3){
throw new IllegalStateException();
}
return adapters;
}
protected abstract BaseAdapter[] internalAdapters();
}
aioobe's answer是採取一個好辦法,但我也建議的東西有點不同:
如果您需要一個方法返回的數組一定的大小,您可能想首先考慮爲什麼數組是適合此方法的返回類型,而不是使用可輕鬆封裝「3 BaseAdapters」的簡單POJO,即:
public class ThreeAdapters {
BaseAdapter getAdapter1() { ...}
BaseAdapter getAdapter2() { ...}
BaseAdapter getAdapter3() { ...}
}
如果您將「返回3個適配器」的想法封裝到自己的類中,這樣可以將其用作返回類型(當然,您可能會發現一個更合適的類名) 。
在Java中,數組的大小不是其類型的一部分。換句話說,具有給定基類型的所有數組類型都是相同的。此外,您不能使用方法簽名對數組類型參數或結果的大小施加限制。
這意味着你剩下的編碼方法是測試(在你的情況下)它將要返回的數組長度。這可能不會對你有太大幫助,因爲我假設你正在試圖利用靜態類型來強制你的數組的「三重性」。從這個角度看@馬特B的答案是錢,但你可以做這樣做的方式,還爲您提供了陣列(長度3):
public class AdapterTriple {
private Adapter[] adapters;
/**
* This constructor may throw an exception
*/
public AdapterTriple(Adapter[] adapters) {
if (adapters.length != 3) {
throw new IllegalArgumentException("array length is wrong");
}
this.adapters = adapters;
}
/**
* This constructor won't throw an exception (apart from Errors)
*/
public AdapterTriple(Adapter adapter1, Adapter adapter2, Adapter adapter3) {
this.adapters = adapters = new Adapters[] {
adapter1, adapter2, adapter3};
}
/**
* @return an array of 3 adapters.
*/
public Adapter[] {
return adapters;
}
}
總之,你不能強制數組尺寸限制靜態Java的。您必須動態執行此操作,但您可以採取措施避免運行時錯誤。
你的問題不清楚。你想創建一個班級還是一個方法?請編輯你的問題。 – sleske 2010-10-13 10:51:53
返回類型不是方法簽名的一部分,這意味着您不能強制超類中的特定返回類型。 – 2010-10-13 12:32:53