我总是问自己这个问题,特别是当我看到JPA 2.0元模型如何运作时......
例如,在JPA 2.0中,我们可以使用处理器为实体Entity创建元模型类Entity _
然后可以在JPA 2.0 Criteria api中使用此元模型来强制键入标准。
例如,你会写:
criteriaBuilder.equal(u.get(User_.username), username);
而不是使用fieldname作为字符串“username”。
我只是想知道为什么它不能在Java中本地处理,而不必处理处理器和一些额外的元数据类。
这不仅仅适用于JPA,它也可以利用反射api。
为什么我们无法直接在java类中访问元数据? 有人可以提供这种功能的缺点吗? 我想这可能是封装没问题吗?
有关JPA2元模型的更多信息: http://www.inze.be/andries/2010/09/19/jpa2-metamodel-example/
答案 0 :(得分:3)
Java 7不支持将方法或字段/属性作为第一类对象。没有添加这些内容的原因是为了保持语言简单。
但是,在我看来,Oracle采用了不同的视图(至少对于方法而言)并且您将能够在Java 8中使用方法引用,并且可能接受并合并使用字段/属性引用的一个JSR。到Java 8或9。
目前支持方法处理的一些文章。 Java 8将为此功能添加语法糖。
http://blogs.oracle.com/jrose/entry/method_handles_in_a_nutshell
http://java.sun.com/developer/technicalArticles/DynTypeLang/