分析和翻译Java 8 lambda表达式

在C#中,您可以在表达式树对象中包含一个lambda表达式,然后可能解析它。 我想知道这是否也可以在Java中使用?

我在找的是做这样的事情:

BooksRepository.getAll()
.where(b -> b.getIban() == "SomeIban")
.and(b -> b.getAuthor() == "SomeAuthor"); //etc.

然后, BooksRepository应以某种方式将该查询转换为以下基于指定为lambdas的谓词的RESTful API请求:

GET http://mylibrary.com/books?Iban=SomeIban&Author=SomeAuthor

然后将结果返回给客户端。 任何想法,如果这在Java甚至可能?


是的,这是可能的。 我制作了一个完全符合这个标准的图书馆:JaQue


我是Jinq的作者。 将lambda表达式自动转换为可在运行时读取的表达式树是C#唯一功能。 这个功能对于普通程序员来说并没有任何通用的用途。 它基本上只对实现LINQ很有用,所以语言设计人员并不热衷于将这一功能添加到Java或其他语言。 曾经有人谈论过为Java添加某种编译器插件框架,这将允许您自己将表达式树功能添加到Java中,但我并不太熟悉该项目的进度。

Jinq包含一个字节码分析框架,可以在运行时从lambda的字节码构建简单的表达式树。 它基于符号执行和ASM。 它可以用来将lambda表达式转换为表达式树,就像C#一样,但是它有相当多的权重过程,并且有很多环节需要跳过,所以对于你想要做的事情可能是过度的。 基本上你会用锤子敲一只苍蝇。

在JVM上运行的Java以外的语言可以更好地支持您想要执行的元编程。 所以你也可以考虑考虑一下Groovy或者Scala。


像Jinq的东西?

database.customerStream().where(customer -> customer.getName().equals("Alice"));
链接地址: http://www.djcxy.com/p/34283.html

上一篇: Parsing and Translating Java 8 lambda expressions

下一篇: Is there a Java equivalent for LINQ?