2013-06-23 88 views
1

我明白接口和抽象類是什麼,但我不知道如何獲得以下功能; 如果可能,那就是。我有一堆課程,每個課程都有一個validate()方法。每種方法可能採用不同的參數。例如,我們可以有類與以下方法:有沒有辦法定義合同來實現一個沒有參數限制的方法(參見解釋)?

boolean validate(); 
boolean validate(Block[]); 
boolean validate(BlockSet[]); 
... 

所以,基本上我想知道如果我可以用一個接口或抽象類,還是別的什麼,要定義的合同,有一個方法給定名稱和返回類型,但對參數集沒有限制。提前致謝。

回答

5

你可以用validate(Object ... args)來做到這一點,但值得質疑的是你是否真的想要。接口和抽象類是很有用的,所以你可以將一堆類似的對象組合在一起,並且通過相同的操作實現不同的事情。在我看來,在不知道底層實現是什麼的情況下,您將無法調用此方法,因此沒有理由將其抽象化。

0

在界面中,使用可變參數的嘗試:

boolean validate(Object... args)

「布爾驗證(塊...塊)`

如果Blocks總是收集,使用他們的超類型:

boolean validate(Collection<Block> blocks) 

但是,那麼你可能需要使用一些演員。不是最好的選擇。

0

如果你想方法採取任何數字參數,然後你可以使用可變參數,但如果你想它改變類型也不可行。

此外,您想要實現的是找到一種單獨的方法重載方式,但是您必須明確指定方法。

相關問題