Eya*_*yad 18 c# java lambda expression-trees java-8
在C#中,您可以将lambda表达式包含在表达式树对象中,然后可以解析它.我想知道这在Java中是否也可行?
我正在寻找的是做这样的事情:
BooksRepository.getAll()
.where(b -> b.getIban() == "SomeIban")
.and(b -> b.getAuthor() == "SomeAuthor"); //etc.
Run Code Online (Sandbox Code Playgroud)
然后BooksRepository应该以某种方式将该查询转换为基于指定为lambdas的谓词的以下RESTful API请求:
GET http://mylibrary.com/books?Iban=SomeIban&Author=SomeAuthor
Run Code Online (Sandbox Code Playgroud)
然后将结果返回给客户端.如果在Java中甚至可以实现这一点?
我是Jinq的作者.lambdas自动转换为可在运行时读取的表达式树是C#唯一的功能.该功能对于普通程序员来说并没有任何通用用途.它基本上只对实现LINQ有用,因此语言设计人员并不热衷于将该功能添加到Java或其他语言中.有人谈到为Java添加某种编译器插件框架,允许你自己将表达式树特性添加到Java中,但我不太熟悉该项目的进展.
Jinq包含一个字节码分析框架,可以在运行时从lambda的字节码构建简单的表达式树.它基于符号执行和ASM.它可以用来将lambda转换为表达式树,就像C#一样,但是它的重量很重,有很多箍要跳过,所以对你想做的事情来说可能有些过分.你基本上是用锤子打一只苍蝇.
在JVM上运行的Java以外的语言可以更好地支持您想要执行的元编程.所以你可能也想考虑一下Groovy或Scala.