是否可以在Java中返回对象的名称?
假设您创建了一个对象:是否可以在Java中返回对象的名称?,java,Java,假设您创建了一个对象: class newClass{ public static void main(String[] args){ Object o = new Object(); } } 是否可以以给定对象的字符串、o或任何形式返回名称?否,这是不可能的。如果你真的想要这个,你可能使用了错误的设计。请注意,对象没有名称。变量确实有一个名称 否。对象不知道外部世界如何称呼它,即它有什么引用 因为Java支持别名,所以这是不明智的,也不可能的。 别名意味着不存
class newClass{
public static void main(String[] args){
Object o = new Object();
}
}
是否可以以给定对象的字符串、o或任何形式返回名称?否,这是不可能的。如果你真的想要这个,你可能使用了错误的设计。请注意,对象没有名称。变量确实有一个名称 否。对象不知道外部世界如何称呼它,即它有什么引用 因为Java支持别名,所以这是不明智的,也不可能的。 别名意味着不存在仅由一个变量引用对象的情况 范围界定只会使整个问题变得更加困难,因为此时只有当前范围中的引用才有用。可能不止一个 如果您能解释一下您试图用这段代码实现什么,这会有所帮助 是否可以在Java中返回对象的名称 如果你这样写:
String name = obj.toString();
它将返回对象的字符串表示形式,但这不是很容易让人理解的。如果要执行此操作,需要创建自定义对象并重写toString方法:
public class MyObject {
private String name;
public String toString() {
return name;
}
}
现在当你写:
String name = myObj.toString();
它将以人类可读的形式返回名称。但是,如果要创建自定义对象,这取决于您的需求。通过这种方式,它非常简单,而且运行良好。这是不可能的
可以使用映射存储从对象名称到对象值的映射,然后返回键
实际上,对象的名称是一个编译时常量。也就是说,一旦你编译了代码,它就不会改变,所以
Object o = new Object();
return "o";
会做你想做的事。这就引出了一个问题,为什么要这样做?除了前面的答案之外,可能还有几个不同的变量,具有不同的标识符,它们都引用同一个对象。一个变量可能在不同的时间引用不同的对象
如果需要从对象到字符串的映射,我建议使用映射。使用java反射是不可能的。但是,如果使用上的调试信息进行编译,则信息存储在java类文件中。你可以使用字节码工程库来挖掘它。注意:我刚刚读了萨伊蒙的答案,在某种程度上,他有更优雅的方式来做这件事 首先,这些人的答案是正确的 但是 如果你真的需要的话 我将用类似MyObject的东西扩展对象类
public class MyObject {
private String objectName;
public MyObject(){
}
public MyObject(String name){
setObjectName(name);
}
public getObjectName(){
return this.objectName;
}
public setObjectName(String name){
this.objectName = name;
}
}
但每次创建对象时,都使用MyObject实例,并将对象名称添加为构造函数参数
MyObject mine = new MyObject("mine");
话虽如此,您为什么需要它仍然是一个悬而未决的问题: 不,你可以还给我一张地图。或者,如果名称是一个编译时常量,那么返回o如何?您到底想做什么?如果你能发布真实的用例就更好了。这里的o是你为引用对象选择的名称。这根本不是物体的属性。任何其他名字的物体都会闻起来很香…谢谢大家的快速反应。。。我只是想知道。。。我知道我是一个傻瓜。。。默认情况下,Java中的所有类都扩展了对象类,因此不需要表达它。