2017-10-28 26 views
2

標題可能會讓您困惑,但這是我所要求的。將函數傳遞給某個方法,然後在另一個方法中使用該函數

我有2個班級:ParserCommandArray

CommandArray我想要一個函數,將一個命令添加到我的數組,看起來有點像這樣:addCommand(String name, [Type] callback)。然後在Parser我想要那CommandArray,所以可以遍歷一串字符串,找到name,解析該行,然後如果一切正常,運行callback並傳遞給它。

下面是一些僞代碼來說明我想要做的更好一點:

myCallback = function(line) 
    print(line) 
end 

function parseLine(command, callback) -- command is the line 
    -- do the parsing 
    callback(command) 
end 

parseLine("Rectangle 32, 32, 64, 64", myCallback) 

聲明:此代碼是沒有測試

有沒有簡單的方法來做到這一點在Java中?

回答

2

我不是100%確定你的最終結果是什麼,但你可以通過使用功能接口來完成。

一個簡單的例子:

下面的代碼是僞代碼相當於:

Consumer<String> myCallback = System.out::println; 

那麼parseLine功能將變爲:

public void parseLine(String command, Consumer<String> callback){ 
     callback.accept(command); 
} 

那麼這行:

parseLine("Rectangle 32, 32, 64, 64", myCallback) 

將變爲:

parseLine("Rectangle 32, 32, 64, 64", myCallback); 

爲所有可用的功能接口,你可以與他們做檢查出java.util.function包的詳細信息。

+1

看起來這完全是我在找的,謝謝你的回答。 – lqPGM

+0

現在我正在測試它,但是用一個字符串數組來代替。我有一個函數接受一個字符串數組作爲我的主類中的參數,但我不知道如何調用它。 'this :: myFunction'不起作用。我收到的錯誤是'方法引用只允許在1.8或更高版本的源代碼級別上執行' – lqPGM

+0

嘗試清理您的項目,如果這樣做不起作用,那麼您可能還需要在項目中設置Java Build路徑。請參閱https://stackoverflow.com/questions/37628789/lamba-are-allowed-at-source-level-only-1-8-or-above。 –

相關問題