2013-05-28 54 views
0

我需要在運行時像下面那樣定義一個對象。任何代碼的佔位符

Filter rowFilter = new RowFilter(CompareFilter.CompareOp.EQUAL, 
new RegexStringComparator(".*-.5")); 

我讀其具有如下面

String _filterString = "RowFilter(CompareFilter.CompareOp.EQUAL, 
    new RegexStringComparator(\".*-.5\"))"; 

現在我需要通過使用上述字符串定義過濾器對象代碼的一個字符串。

我知道,我們可以通過使用Reflections實現這種類型的問題。但我正在尋找替代品。有沒有簡單的方法來解決這樣的問題?

+1

如果'_filterString'來自用戶輸入,不要這樣做。如果它來自數據庫,則應該直接序列化java對象(xstream?)。 – 2013-05-28 05:46:04

+0

感謝您的回覆。有很多過濾器可用,參數也因濾波器而異。如果我從輸入中讀取單個字符串,對我來說將會非常簡單。我正在通過使用反射來實現,以及我也在尋找替代品。這裏我的問題是關於java中佔位符的可能性。有沒有簡單的方法? –

回答

1

Java Compiler可用於運行時編譯,但它需要一個完整的源代碼(編譯單元)。我不認爲可以編譯單個表達式。也許,你可以從這裏開始從運行時編譯的類中獲取對象。

2

Java Scripting API允許嵌入其他語言(如JavaScript)並綁定到Java變量和方法。在你的情況下,可以使用語言BeanShell(Java子集)。