我正在嘗試實現一個U.I.用戶將在控制檯中鍵入一個值,並且我的程序應該調用一個函數,該函數將執行並修改某個值或執行並返回一些值。無論哪種情況,這個函數都可以帶參數或不帶參數。Java如何使用可變參數方法和泛型返回類型實現接口
所以在這一點上,這聽起來像是getter和setter,但我不想完全以這種方式實現它,這是爲了避免必須通過10+ if語句才能確定要做什麼給出用戶輸入。
所以我的解決方案是創建一個有點像我這班裏面和我想要運行的每個活動接口的,我創建一個使用此接口的它的實例:
private interface DoActivity <R> {
public R execute(Object... param);
}
這工作時,我不想指定類型的參數傳遞給execute方法,但是當我創建DoActivity的一個實例,像這樣與它的執行方法:
private class setPerson implements DoActivity {
@Override
public Void execute(String name, String telephone) {
...
return null;
}
}
我得到一個錯誤與上面的: method does not implement or override a method from supertype
有沒有辦法做到我想要的而不訴諸反思?
使用示例:
// at prompt
>> Enter an operation: 1 Bumble Bee
>> ...
// In program
String input = "1 Bumble Bee";
String split[] = input.split();
int operation = Integer.parseInt(split[0]);
DoActivityArray[operation - 1].execute(split[1], split[2]);
你的執行方法不具有相同類型的接口。一個用戶不是(或不應該)有一個'setPerson'對象,而是他們應該有一個'DoActivity'對象,它恰好是用'setPerson'對象實例化的。從方法原型來看,它們應該能夠放置任意數量的對象,而不僅僅是兩個。 – Jared 2014-10-12 02:15:37
我沒有看到這是一個接口的正確使用。爲了執行該方法,需要認識到它不是'DoActivity'對象,而是'setPerson'對象。這表明'setPerson'與'DoActivity'不同,因此不應該被等同(這就是接口本質上的含義 - 對象表示相同的東西,但行爲不同)。 – Jared 2014-10-12 02:20:44
@Jared'setPerson'與'DoActivity'沒有區別,注意類聲明旁邊的'implements'?這意味着'setPerson'是一個'DoActivity'對象 – smac89 2014-10-12 03:26:16