是否可以在Java中返回Object的名称?

时间:2013-08-11 08:53:12

标签: java

假设您创建了一个对象:

class newClass{
    public static void main(String[] args){
        Object o = new Object();
    }
}

是否可以将名称作为字符串,“o”或任何形式返回给定对象?

8 个答案:

答案 0 :(得分:7)

不,这是不可能的。如果你真的想要这个,你可能使用了错误的设计。请注意,对象没有名称。变量确实有一个名字。

答案 1 :(得分:3)

没有。该对象不知道外界称之为什么,即它有什么参考。

答案 2 :(得分:3)

  

是否可以在Java中返回Object的名称?

如果你写这样的话:

String name = obj.toString();

它将返回对象的字符串表示形式,但这不是人类可读的。如果你想这样做,你需要创建自定义对象并覆盖toString()方法:

public class MyObject {

   private String name;


   public String toString() {
      return name;
   }
}

现在你写的时候:

String name = myObj.toString();

它将以人类可读的形式返回名称。但是,如果要创建自定义对象,这取决于您的要求。通过这种方式,它非常简单,效果很好。

答案 3 :(得分:2)

这是不可能的。

您可以使用Map<String, Object>存储从对象名到对象值的映射,然后返回密钥。

实际上,对象的“名称”是编译时常量。即编译代码后它不会改变

Object o = new Object();
return "o";

真的会做你想要的。这引出了一个问题,你为什么要那样做呢?

答案 4 :(得分:1)

使用java反射是不可能的。但是,如果使用调试信息进行编译,则信息存储在java类文件中。您可以使用像ASM这样的字节码工程库来挖掘它。

答案 5 :(得分:1)

注意:我只是阅读了sajmon的答案,并且他在某种程度上有更优雅的方式

首先,这些家伙的答案是正确的

但是

如果你真的需要它

我会用类似MyObject

的东西扩展Object类
 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;
    }
    }

但是每次创建Object时都使用MyObject实例,并将对象名称添加为构造函数参数

MyObject mine = new MyObject("mine");

话虽如此,关于你为什么需要它仍然是一个悬而未决的问题? :)

答案 6 :(得分:0)

由于Java支持别名,这实际上是不明智或不可能的。 别名意味着没有代表只有一个变量引用对象。

范围确定只会使整个问题变得更加困难,因为当前范围内的引用只会在此时使用。并且可能不止一个。

如果你用这段代码解释了你想要实现的目标,那将会有所帮助。

答案 7 :(得分:0)

除了之前的答案,可能有几个不同的变量,它们都引用同一个对象。变量可以在不同时间引用不同的对象。

如果您需要从对象到String的映射,我建议使用Map<Object,String>