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

问题描述 投票:0回答:3

例如与

class Foo {
  Integer bar;
}

我想知道为什么没有语言功能让我能够做到

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

参考元字段栏?

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

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

---更新---

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

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

字符串“bar”和 Foo 的属性

bar
之间没有正式的链接(对于编译器/IDE)。

java metadata metaprogramming
3个回答
1
投票

因为

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

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


0
投票

我想说,没有这样的功能的主要原因是它没有用处。

为什么我们会要求特定类中特定字段的元信息?

如果我们对类和字段对进行硬编码,那么我们已经知道字段的所有元信息,因为它们无法在运行时更改。当我们已经知道结果是

Foo.class.bar.getType()
时,通过
Integer.class
获得的信息有何用途?


0
投票

理论上我不会将类属性/字段称为“元”字段。元数据通过java注释分配给属性/字段,并且该元数据通过反射访问。通过执行 Foo.class.bar,您破坏了这种美丽的静态语言的面向对象的全部意义。 (或者换句话说,java 还不够 groovy 来做到这一点))

© www.soinside.com 2019 - 2024. All rights reserved.