【问题标题】:Meta programming - Is class an object in Java?元编程 - 类是 Java 中的对象吗?
【发布时间】:2017-09-16 11:05:35
【问题描述】:

package1.MyClass 的实例是一个对象,它具有身份、属性、行为并与其他实例(对象)保持关联(组合/聚合)。

说,package1.MySubClass 扩展了 package1.MyClass


以下代码使用Class元编程抽象,

Class<?> myClassInstance = Class.forName("package1.MyClass");

提供有关package1.MyClass 类的信息。


1) package1.MyClass 是一个对象吗?

2) 如果是,package1.MyClassobject 是否有它自己的身份、属性、行为并持有关于与package1.MySubClassobject 的泛化关系的信息?

3) 为什么 Java 将元编程称为反射?

【问题讨论】:

  • 它是一个对象,不清楚 2 到底是什么,而 3 主要是因为它不是元编程。不过,您想看看How to Askhelp center
  • @pvg 现在问题 2 有意义吗?
  • @pvg here 它说,反射是元编程的子集
  • 它没有这么说。它说明了一些类似于反射的东西,它是一种对某些类型的元编程实现有用的工具。 Java 不调用“元编程”反射,因为反射并不意味着“元编程”,它意味着别的东西。 C++ 元编程或 lisp 宏等系统并不严格依赖运行时反射。
  • @overexchange 我是说 Java 中所有不是原始的(原始短列表)的东西都是一个对象,所以如果你指的是不是原始的东西,它就是一个东西。您可以通过查看文档或使用调试器检查它来准确了解它。

标签: java reflection metaprogramming


【解决方案1】:

Class 的 javadoc 显示它派生Object,因此它是一个对象。您可以在 Class 对象上调用 toString()hashCode() 等。此外,您可以调用Class-specific 方法来识别特定属性。请参阅 javadoc 了解所有可用的内容。

请注意,reflection 不是 Java 特定的术语。 元编程这个术语在 Java 世界中并未广泛使用。

【讨论】:

  • 期限或能力? here,它说反射是元编程的子集,以与语言无关的方式
  • 我没有投反对票,但我不同意 Java 中没有使用该术语。我想说的是,这个词的使用并不像在使它更容易的语言中那样普遍。
  • 我对它投了反对票,作为答案,它很懒惰并且模糊地误导/不准确/不完整。更重要的是,问题本身很糟糕,以至于跑题了,一个人的努力最好是帮助发帖者缩小范围和/或重新制定,而不是急于提供同样糟糕的答案。
  • 好吧,我不同意(并且希望在反对票旁边发表评论)。它专门回答了第 1 点和第 2 点,我建议在 Java 社区中没有广泛使用元编程这个短语。我的大多数对话都围绕着术语(和 API)反射
  • 你并没有真正欠 cmets 反对票,所以我觉得抱怨这件事很奇怪,但没关系。我认为 javadoc 论点似乎是非基本的和倒退的。问题不在于Class 是否是Object 类型的子类型。 2 根本没有解决,3 含糊不清,有点错误,同样,也没有解决 3 本身提出的问题。所以这是对一个糟糕问题的糟糕回答,并且对改进这个糟糕问题几乎没有什么作用,我认为这是更大的罪过。在我看来,无论出于善意,这只会让网站变得更糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 2020-03-22
  • 2012-02-05
  • 2021-07-20
  • 1970-01-01
  • 2011-08-11
  • 2014-09-24
相关资源
最近更新 更多