Java 在Rythm引擎中使用lambda表达式
我尝试在Rythm引擎中使用lambda表达式,它在大多数情况下都能工作。但是,当我在lambda表达式中调用标记时,它不起作用 最简单的例子:Java 在Rythm引擎中使用lambda表达式,java,rythm,Java,Rythm,我尝试在Rythm引擎中使用lambda表达式,它在大多数情况下都能工作。但是,当我在lambda表达式中调用标记时,它不起作用 最简单的例子: @test(x -> blabla(x) ) @def test(java.util.function.Function f) { @f.apply("Test") } @def blabla(String text) { ... Test: @text ... } 如果我在lambda表达式中使用字符串连接
@test(x -> blabla(x) )
@def test(java.util.function.Function f) {
@f.apply("Test")
}
@def blabla(String text) {
...
Test: @text
...
}
如果我在lambda表达式中使用字符串连接,它工作得很好,但是在我的实际代码中,我需要调用一个复杂的标记
有人知道我怎么做吗
谢谢。最后,我找到了一个解决方案 修改生成的java代码,可以看到名为“blabla”(抱歉,愚蠢的名称)的函数具有以下签名:
public org.rythmengine.utils.RawData blabla(String text)
因此,使其工作的方法是调用“RawData.toString()”
解决办法是:
@test(x -> blabla( x.toString() )
@def test(java.util.function.Function<String, String> f) {
@f.apply("Test")
}
@def blabla(String text) {
...
Test: @text
...
}
@test(x->blabla(x.toString())
@def测试(java.util.function.function f){
@f、 应用(“测试”)
}
@def blabla(字符串文本){
...
测试:@text
...
}
为了防止不必要的转换,我将参数“String,String”添加到泛型类“java.util.function.function”中
为了测试代码,定义环境变量“home.tmp.dir”并使用原始代码类型非常有用:
Map<String, Object> conf = new HashMap<>();
conf.put("home.tmp.dir", "./rythm/"); // Generated code
RythmEngine engine = new RythmEngine(conf);
engine.prepare(ICodeType.DefImpl.RAW);
Map conf=new HashMap();
conf.put(“home.tmp.dir”,“/rythm/”;//生成的代码
RythmEngine=新RythmEngine(配置);
发动机准备(ICodeType.DefImpl.RAW);