【问题标题】:Why is Java meta programmation support not better? [closed]为什么 Java 元编程支持不是更好? [关闭]
【发布时间】:2012-01-03 13:18:23
【问题描述】:

我一直问自己这个问题,尤其是当我看到 JPA 2.0 元模型如何工作时...

例如在 JPA 2.0 中,我们可以使用处理器为实体 Entity 创建元模型类 Entity_

然后可以在 JPA 2.0 Criteria api 中使用此元模型来获得强类型标准。

例如,你会写:

criteriaBuilder.equal(u.get(User_.username), username);

而不是使用字段名作为字符串“用户名”。

我只是想知道为什么它没有在 Java 中本地处理,而不必处理处理器和几个额外的元数据类。

它不仅适用于 JPA,它也可以利用反射 api。

那么有什么原因我们不能直接在 java 类中访问元数据呢? 有人可以提供具有这种功能的缺点吗? 我猜可能是封装有问题吧?


有关 JPA2 元模型的更多信息: http://www.inze.be/andries/2010/09/19/jpa2-metamodel-example/

【问题讨论】:

  • 只有一件事:您能否针对此类功能提及一个实际的、真实的案例?我不明白你的意思/想要什么
  • 现实世界的用例很明显:能够用 JPA 2.0 标准 API 处理元模型,但不必处理生成元模型类的处理器

标签: java reflection jpa metaprogramming jpa-2.0


【解决方案1】:

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/

http://www.java7developer.com/blog/?p=191

【讨论】:

  • 谢谢。对于封装之类的事情,您是否看到这种方法的任何缺点(我的意思是我们能否获得私有方法引用)?您是否有该信息的链接 (JSR)?
  • 我想安全模型将以与反射当前相同的方式受到保护。
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2010-11-11
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多