LINQ for Java 工具 [已关闭]

2022-09-01 02:57:33

用于 java 的 LINQ 会是一个有用的工具吗?我一直在研究一种工具,该工具将允许Java对象映射到数据库中的行。

  1. 这对Java程序员有用吗?
  2. 哪些功能会有用?

答案 1

LINQ for Java 会很可爱,但问题是语言集成。

Java没有像lambda表达式那样简洁的东西,它们是LINQ的基石之一。我想他们可以通过使扩展创建匿名内部类,在没有lambda表达式的普通Java之上分层查询表达式支持 - 但这将是非常可怕的。如果你想做任何类似 LINQ to SQL 的操作,你还需要表达式树。

检查的异常可能会妨碍,但我们必须看看。IQueryable的等效物需要具有某种常规检查异常 - 或者它可能在元素类型和异常类型中都是通用的...

无论如何,这都是天上掉馅饼 - 考虑到Java社区在闭包方面遇到的麻烦,我认为在Java本身中更早地期望像LINQ这样的东西是在2012年左右是愚蠢的。当然,这并不是说这在“类似Java”的语言中是不可能的。例如,Groovy已经具有某些有用的方面。

对于库端,Hibernate已经提供了LINQ to SQL的许多功能的“非集成”版本。对于LINQ to Objects,你应该看看Google Java Collections API - 它有很多相同的东西(过滤,投影等)。当然,如果没有lambdas,使用起来会更加麻烦 - 但它仍然非常非常方便。(我在工作中一直使用Google Collections代码,我不想回到“vanilla”Java集合。


答案 2

值得注意的是,Scala 2.8 将支持 LINQ...


实际上,scala 标准集合提供的 API 在某种意义上类似于 LINQ-for-Objects。下面是一个示例:

List("Paris","Berlin","London","Tokyo")
  .filter(c => c.endsWith("n"))
  .map(c => c.length) 
// result would be length of the words that ends 
// with "n" letter ("Berlin" and "London").

不要害怕新行点语法:你可以用普通的旧风格编写代码:

Array(1,2,3,4,5,6).map(x => x*x)

还有许多项目提供了接近 LINQ 到 SQL 的语法。例如,从Squeryll获取的片段:

import Library._
using(session) { 
  books.insert(new Author(1, "Michel","Folco"))            
  val a = from(authors)(a=> where(a.lastName === "Folco") select(a)) 
}
// but note that there is more code behind this example

推荐