0

结合闭包(FCM)和泛型,是否有可能拥有完全类型安全的标准。

// The following works without a cast as Foo.id is a 'long' field.
List<Long> ids = session.createCriteria(Foo.class)
                        .setProjection(Foo#id)
                        .list();

// The following is a compilation error, as Foo.bar is defined as an int, and not a string
session.createCriteria(Foo.class)
       .addRestriction(Restrictions.eq(Foo#bar,"blah"))
       .list();

我已经阅读了类型安全标准的 JPA 2.0 规范。但是还是有些欠缺的。

此外,我只是在此处使用标准作为总体提高代码类型安全性的示例。我大量使用 java 的静态类型来让我更快地编写代码。但结果我时不时地被忽略输入的代码部分咬伤。例如 HQL 查询。

4

2 回答 2

2

您描述的代码不使用闭包,而是使用字段文字方法文字)。就像好的旧类文字一样。这些可能有助于标准 API。可以用它替换类型安全查询接口的JPA 2 源代码生成解决方法。如果它将成为JDK7的一部分。

于 2009-11-20T22:34:47.113 回答
1

正如 Thomas 所指出的,这并不严格要求闭包。目前这一切都悬而未决,因为没有人知道正在研究什么提案。目前尚不清楚 FCM 是否真的是该提案的基础,特别是考虑到 Stephen Colebourne 似乎和任何人一样对该公告感到怀疑。

很多人都在指出Neal Gafter 神秘地修改了或多或少正确的 Devoxx-presentation-announcing-closures-was-being-being-given 规范,作为关于闭包可能采取何种形式的暗示。请注意,修改后的提案看起来(在美学上)很像 FCM!

该规范确实包括您引用的引用类型(在上一行的“方法引用”下),当然 FCM 也有相同的。是的,这肯定会让你的建议成为可能。在阅读这方面,我的第一个想法是它会如何影响 JPA/Hibernate,和/或我们自己的抽象层,在这方面。您的标准中的类型安全、可重构的方法引用?地狱是的。

于 2009-11-21T05:36:07.573 回答