java - 为什么不能在 Java 中引用元字段或方法?

标签 java metadata metaprogramming meta

例如与

class Foo {
  Integer bar;
}

我想知道为什么没有语言功能可以让我这样做

Foo.class.bar //yes, xxx.class returns something of java.lang.Class<T>

引用元字段栏?

我正在阅读 Pro JPA 2 Book,在我看来规范的元模型生成是必要的,因为这在 Java 中是不可能的。

注意,这是一个出于好奇的理论问题,我想从中获得一些见解,为什么这个功能没有实现。

---更新---

为了更详细地阐述我的问题,请考虑通过 Entity Graph API 在 JPA 中添加属性的示例:

EntityGraph<Foo> g = myEntityManager.createEntityGraph(Foo.class)
g.addAttributeNodes("bar")

在字符串“bar”和 Foo 的属性 bar 之间没有正式的链接(对于编译器/IDE)。

最佳答案

因为 .class 不是在编译时返回当前类的魔术字段,它只是一个 sugar替换 getClass() 方法,该方法只会在运行时在 Class 对象的实例上执行。实现您的“功能”需要重建整个概念。

回答您问题的最可信的理论将基于这样的想法,即当反射模型是用 Java 设计时,您的“功能”在当时看起来并不真正“有用”。

关于java - 为什么不能在 Java 中引用元字段或方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006306/

相关文章:

java - 查找匹配多个文本的 Xpath

java - 如何高效读取元数据文件?

c++ - 继承、伪多态

c++ - C++ 元编程中的模板柯里化(Currying)

java - Graal VM 构建错误 : java. lang.NullPointerException:无法调用 "java.util.Set.iterator()",因为 "triggers"为 null

java - 使代码可供其他子类和子子类使用

java - 创建 Producer 方法时收到模糊依赖警告

c# - 在 C# (Plex Media Server) 中访问/更改视频文件(MKV 等)的元数据

entity-framework - RIA 服务和 EF 验证

python - 抽象基类中的断言?