2013-06-18 69 views
4

我想獲得功能界面的實例,例如來自字符串的謂詞。例如,用戶在UI的文本字段中鍵入lambda表達式以過濾某些數字列表 list.stream()。filter(「lambda here」)如何在JDK8中動態編譯/加載lambda表達式?

+0

也許這些答案給了一些靈感:http://stackoverflow.com/questions/22207447/how-to-convert-a-string-to-a-lambda-expression – rmuller

回答

5

有沒有一種簡單的方法可以做到這一點。 Java並沒有轉向一些動態語言,我害怕。

您可以使用自JDK6以來提供的Java Compiler API將代碼片段編譯爲實現Predicate的類並實時加載它,但它不會很漂亮。

+1

沒錯。 「不會很漂亮」的一種方式是,lambda表達式實際上不能孤立編譯;它必須具有編譯器可以從中進行類型推斷的目標類型。例如,要求編譯器編譯lambda表達式'x - > false'將不起作用,因爲編譯器無法確定x的類型。它可能會讓UI向一個指定類型參數的函數接口隱式地添加一個轉換,例如, '(謂詞)(x - > false)'。 –