Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在Java中返回对象的名称?_Java - Fatal编程技术网

是否可以在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中的所有类都扩展了对象类,因此不需要表达它。