当前位置: 首页 > 面试题库 >

是否可以在Java运行时获取对象的声明名称?

束作人
2023-03-14
问题内容

可以说我在代码中的某个位置有一个按钮:“ JButton closeButton”。我不知道它叫“ closeButton”,但这是我想找出的。

在运行时,该按钮将被单击,一旦完成,我就可以通过反射和AWT api找到很多关于它的信息-但是我不能做的就是找出它的位置-
在代码中如何调用它,名字叫什么它声明为(“ closeButton”)。

是否可以从JVM中找到它?

有没有一种方法可以以在运行时保留实例名称的方式来编译和运行代码?

也许有某种类型的“ javaagent”(如果可能的话免费)可以在这种情况下帮助我吗?

谢谢

编辑(美国东部时间14:23):

我以按钮为例,但是它可以是任何类型的组件,可以保留一个值并为其附加ActionListeners。我可以通过反射获取有关该组件的所有信息,但是我无法在代码中找到它。即使已经声明了10个具有相同名称的组件,这仍然可以带给我领先优势,但我可以消除可能性。


问题答案:

简短的答案:不可能。

详细信息:您所说name的实际上与的实例无关JButton。只是保留引用的 变量
,该引用允许在运行时访问该实例。此示例代码将明显显示此错误:

JButton newButton = new JButton();
JButton otherButton = newButton;

在这里,两个变量都引用了相同的JButton实例。



 类似资料:
  • 是否可以在运行时使用TypeScript获取对象的类/类型名称?

  • 我正在使用@FindBy注释来定位WebElements。但是我想在方法中使用这些WebElement作为参数。只有在页面上找到WebElement,我才能成功地使用它。但如果我想等待它,我必须使用By(使用相同的定位器)。 例如。 这样,我就可以在某些方法中使用这个WebElement作为By对象,比如 对于每个元素,我有4行代码。我很懒,正在寻找一种简化的方法。

  • 问题内容: 是否可以在Gradle中声明一个可在Java中使用的变量?基本上,我想在build.gradle中声明一些var,然后在构建时(显然)获取它。就像C / C ++中的预处理器宏一样… 一个声明的例子就是这样: 有没有办法做这样的事情? 问题答案: 生成Java常量 你可以使用 产生Android资源 你可以使用或以通常的方式访问它们

  • 问题内容: 例如,假设我想“提取” 为三个单独的变量,例如: 我该怎么做,而忽略了 “为什么要这么做呢?” 您可能会被问到这个问题。 之前已经多次问过类似的问题,但是从未给出真正的答案,因为OP真正需要的是使用不同的方法。很好,但这有可能吗? 我看过反射,似乎没有任何方法可以使我甚至向实例添加额外的字段,更不用说动态创建本地了。 问题答案: 是否可以在Java运行时创建变量? 简单回答是不。 Ja