【问题标题】:How can I get the name of a field in an Object? [duplicate]如何获取对象中字段的名称? [复制]
【发布时间】:2014-04-25 22:26:47
【问题描述】:

是否存在允许我获取另一个对象中的字段名称的方法?

【问题讨论】:

  • 如果我理解正确的话,一个对象不属于一个类。变量属于一个类或某个其他范围。如果您正在使用它,您已经知道它是什么类或范围。
  • 是的,* 我愿意*,但如果它只是整个输出中的一个列表,说明如下:null 已初始化。错误初始化。 java.lang.Integer 已初始化。值:0。
  • 你指的是'objects own name',如果这不是类名,这是什么意思?
  • 我的意思是标识符。 Object *obj*; obj 是我需要知道的类中初始化的内容是什么?但我不知道它是什么!

标签: java reflection field


【解决方案1】:

如果我正确理解您的问题,您可以(错误地)使用 Java 的堆栈跟踪系统来确定调用者。在对象的构造函数中放入这样的东西:

try {
        throw new Exception();
    } catch (Exception ex) {
        String s = ex.getStackTrace()[1].getClassName();
        System.out.println(s);
    }

我怀疑这不是您正在寻找的东西,但是,如果您尝试一下,我想您会找到您想要的。

【讨论】:

  • 我必须说,真的很聪明。 (滥用与否:))
  • @Takendarkk 显然不够聪明。我似乎被否决了。
  • 好吧,它可能无法正常工作或类似的事情,我不确定。但我喜欢这种思路。
  • @Takendarkk 顺便说一句,我运行了这个并且效果很好,但需要注意的是它打印了package.path.classname 而不仅仅是classname,但除此之外,它完成了他想要的(我认为) .
  • 他似乎在寻找这样的东西:如果他写了Obj myObj22 = new Object(),他希望能够找到myObj22
【解决方案2】:

没有办法做到这一点,期间。一个对象可以同时被多个变量引用,并且没有可以查询的“主列表”。您想要的信息根本不可用。对象没有“名称”。

【讨论】:

  • 也许我应该编辑它,因为它显然会引起误解。我想要的是它经过的标识符。任何一种对象都有一个特殊的“名称”,这个名称是指计算机经过某种位置。这里的名字是如果你有Object apple 那么苹果就是对象的“名字”。
  • @LinkTheProgrammer Ernest 正确地指出没有这样的标识符,没有这样的位置,没有使用 Java,甚至没有使用反射。对于 JVM,任何地方都没有 apple,只是使用了内存中的 随机 空间。
  • 那么当它列出所有变量和对象以及类名时,IDE 中的调试器究竟是如何工作的!也许我可以在程序中实现一些本机方法来为我获取这些对象名称? private static native void getObjectName() ?再说一遍,它可能使用 txt 识别,只是在声明后才发现东西,我猜不是?
  • @LinkTheProgrammer 它比这更复杂。不过你可以看看JPDA
  • 这一切都没有改变这样一个事实,即给定一个对象,没有办法获得“名称”,定义为指向它的变量的名称。片刻思考将证明这一定是正确的,因为一个对象可以被 1000 个变量引用,所有变量都有不同的变量名。 Unsafe 和 JPDA 都不会给你这个信息,因为它不存在。
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多