如果取得已知对象的名称(不是类型,而是对象的名称)

beyondhyb 2006-02-21 03:19:14
在做UI(界面)的时候,我希望将界面上所有的控件都保存到属性文件中,如:有一个TextField,创建:(TextField text1 = new TextField("Name"));
我希望在保存到属性文件的时候能把text1 这个控件的名称“text1 ”保存下来。

换句话说,如果将一个对象 text1的名称取得/

谢谢。

...全文
269 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2006-02-22
  • 打赏
  • 举报
回复
不能,否则的话,java.lang.Object里面就可以取到!

你获得的已知对象本身(也就是new TextField("Name")这部分),位于堆之中,而他是没有实际名称的。拥有名字的是栈中的那个指针(也就是TextField text1这个),但是同一个对象可能有N(>=1)处引用,每一处的名字不尽相同。

上面没有考虑到字段(Field)
不过,即使字段能得到名字,那也是字段的名字,而不是已知对象的名字。
当然,如果按照北极星的说法,可以得到某个对象是否就是某个字段,并借此得到名字。但这无论从运行效果还是从搂住的描述来看,都是不一样的。

IDE之所以“能”是因为那段Java代码是他生成的,或者在打开这个java文件的时候读取并分析过的
doway 2006-02-22
  • 打赏
  • 举报
回复
哈,听起来象我。
beyondhyb 2006-02-22
  • 打赏
  • 举报
回复
我已经取到过,但是忘记了具体的代码
北极猩猩 2006-02-22
  • 打赏
  • 举报
回复
text1只不过是一个变量名而已,并不属于对象的一部分,通过Java Runtime是没法得到的。
除非这个变量是一个成员变量,可以通过它的对象来遍历
treeroot 2006-02-21
  • 打赏
  • 举报
回复
临时变量当然不存在,所以变量的长短是不影响空间占用的
但是成员变量是不一样的
Samland 2006-02-21
  • 打赏
  • 举报
回复
凭编译后的地址找
interpb 2006-02-21
  • 打赏
  • 举报
回复
变量名是不出现在编译后的文件当中的,就是说编译成class之后,"text1"就没有了,上哪找去。

////////////////////////////////
既然没有了,那我们创建一个对象后,调用其属性的时候是怎么工作的
infowain 2006-02-21
  • 打赏
  • 举报
回复
支持一楼的说法
725137 2006-02-21
  • 打赏
  • 举报
回复
用Class内中的方法
getDeclaredFields()
这个方法可以遍历一个类中所有的成员变量名
interpb 2006-02-21
  • 打赏
  • 举报
回复
用反射就可以完成
/////////////////////////
Class c = UI.class;
Field[] fields = c.getDeclaredFields() ;
for(int i = 0;i < fields.length ; i++) {
String name = fields[i].getName(); //获得属性名
//store name

}
能不能满足要求!
捏造的信仰 2006-02-21
  • 打赏
  • 举报
回复
变量名是不出现在编译后的文件当中的,就是说编译成class之后,"text1"就没有了,上哪找去。

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧