我怎样才能在Java对象的名字?

像这样,A =一个新的A(),我怎么能得到的名字?(获得“A”从一个字符串)?



有一个JPanel包含一些JTextField的,地图包含所有JTextField中的名字(变量的名字)。 我想设置地图的值到JTextField的“文本。

public void mapToJPanel(Map map, JPanel panel) { Component[] compArr = panel.getComponents(); for (Component comp : compArr) { if (comp.getClass().getSimpleName().equals("JTextField")) { JTextField textField = (JTextField) comp; textField.setText(map.get(textField.getName()).toString());//getName() method } } }

翻过getName()方法,我得到空-_-我知道getName()方法不是用来获取变量名。 我使用NetBeans做的Java Swing可视化开发,所以我不能改写的组件(如JTextField中)。

--------------解决方案-------------

您可以使用Component.setName()给名字Swing和AWT组件。

你不能,因为对象没有一个名字。 考虑下面的例子:

A a = new A();
A b = a;

什么是的“名称” A现在的情况? 它是"a" 它是"b"

又是怎么回事呢?

A[] a = new A[] { new A(), new A()};
a[0] = a[1];

什么是“姓名”的实例的a[1]

我的意思是,你能不能拿出了在各种情况下工作的一个普遍的Java对象名称的一个有用的/可用的定义。 路障问题包括:

  • 名称稳定性:当一个对象的引用被分配发生改变的“名”是没有用的。
  • 单名:对象不应该同时有多个名称。
  • 可执行性:任何命名系统必须可实现的,而不对对象的正常使用堂堂一个性能开销。 AFAIK,这是不可能的......至少在硬件的种类,我们目前使用的。

了Java涉及到一个名称的对象最接近的是物体的“身份哈希码”的价值。 它不是唯一的,但它有,它不会对对象在当前JVM的寿命改变属性。 (但是,即使身份哈希码是在一个运行成本......这使得它在Java的设计错误在一些人们的观点。)

明智的做法来命名对象的(如其他人所说的),以增加“名称”字段相关的类(或使用现有的),根据需要管理自己的名字。

你不能。

如果您编译与调试符号则.class文件将包含变量名的表(这是怎么调试程序映射变量回到你的源代码),但有没有保证,这将是有,它不是在运行时暴露出来。

虽然你可以很容易地通过调用.getClass()得到一个变量的类的名称。另一方面,getCanonicalName()或.getClass()。getSimpleName()(取决于是否要完全合格的名称),也不是那么容易得到的一个变量的名称。 Java字节码不需要保留局部变量的名称(其是使用表示的堆栈上压入/弹出操作); 然而,Java字节码可能包含原始名称的意见。 所以,你可以尝试读取的.jar文件的.class文件,并尝试从.class文件中提取的变量名,假设编译器包括了他们的意见。 至于成员变量(即字段),你可以使用反射来获取类的字段名。

你不能和它好像你正在做的事情错了,如果你需要这样做。 但是,如果你真的想追求你所列出的逻辑,你为什么不做到以下几点:

添加一个字符串成员为A,并在构造函数中,分配给它。 事情是这样的:

A a = new A('a');

名字(符号)一个的复制是什么不便,有点吵。 是与宏一种语言,那么我们可以定义这个,以便复制会自动在源代码程序。

make(A, a);

或makeA(一)

您可以尝试定义一个新的对象延伸(显式或只是功能)与对象的名称一个新的String字段原来的对象。 然后,为得到这个名字,当你需要它的方法。 这种方法曾非常适合我。

分类:java的 时间:2015-03-15 人气:1
本文关键词: java的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.408 (s). 10 q(s)