2012-05-05 33 views
3

StringTemplate允許程序員通過getters(一個沒有參數的函數)獲取數據。使用來自StringTemplate的參數調用Java函數?

我想知道是否有可能使用字符串模板的參數調用Java函數?

+0

不是真的。這將允許「執行代碼」和違反分色。但是,屬性格式支持 - 例如'format =「1,2,3,4」'可能會被濫用... – 2012-06-13 06:29:40

+1

也可以通過創建地圖並將其放入一些值和預期結果中來人爲地模擬類似於功能的行爲。然後,您可以在模板中使用這樣的地圖: machinery

回答

0

濫用字典有一個解決方法。這裏是一個實現「功能」的例子,用於限制列表中的項目數量(issue on github)。

在你的代碼添加詞典:

group.defineDictionary("max", new MaxListItemsLimiter());

使用(在本例爲數組的第一個項目是最大的項目數):

<max.(["50",myObject.items]):{msg|<msg.something>}>

final class MaxListItemsLimiter extends AbstractMap<String, Object> { 

    @Override 
    public Object get(Object key) { 
     List items = (List) key; 
     if (!items.isEmpty()) { 
      //First item is max. count 
      Integer limit = NumberUtils.toInt(items.get(0).toString(), -1); //use Integer.parseInt 
      if (limit != -1) { 
       return items.subList(1, Math.min(items.size(), limit + 1)); 
      } else { 
       throw new AssertionError("First parameter in max must be number"); 
      } 
     } else { 
      return super.get(key); 
     } 
    } 

    @Override 
    public Set<Map.Entry<String, Object>> entrySet() { 
     return Collections.emptySet(); 
    } 

    @Override 
    public boolean containsKey(Object key) { 
     if (key instanceof List) { 
      return true; 
     } else { 
      throw new AssertionError("You can use max only on Lists."); 
     } 
    } 
} 
相關問題