繁体   English   中英

是否可以用Java返回对象的名称?

[英]Is it possible to return the name of an Object in Java?

假设您创建一个对象:

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

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

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

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

是否可以用Java返回对象的名称?

如果您编写如下内容:

String name = obj.toString();

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

public class MyObject {

   private String name;


   public String toString() {
      return name;
   }
}

现在,当您编写时:

String name = myObj.toString();

它将以人类可读的形式返回名称。 但是,如果要创建自定义对象,这取决于您的要求。 这样,它非常简单并且运行良好。

这是不可能的。

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

实际上,对象的“名称”是一个编译时间常数。 也就是说,一旦您编译了代码,它就不会改变,因此

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

从字面上会做你想要的。 哪个提出了问题,您为什么要这样做?

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

注意:我只是阅读了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;
    }
    }

但是随后每次创建对象时,请改用MyObject实例,然后将对象名称添加为构造函数参数

MyObject mine = new MyObject("mine");

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

由于Java支持别名,因此这确实不可行。 别名意味着没有保证对象只能由一个变量引用。

范围界定只会使整个问题更加棘手,因为此时只有当前范围内的引用才有用。 可能不止一个。

如果您解释了这段代码要达到的目的,这将有所帮助。

除了先前的答案之外,可能还有几个具有不同标识符的不同变量,它们均引用同一对象。 变量可以在不同的时间引用不同的对象。

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

Jackson (Java):反序列化相同的属性名但返回不同的对象。 其中一个返回 object 和第二个列表<object><div id="text_translate"><p>我有一个这样的 POJO:</p><pre> public class NewClass { String name; @JsonProperty("productType") ProductType productType2005; List&lt;ProductType&gt; productType; }</pre><p> 我想将 json 反序列化为 Pojo。 问题是我的属性名称相同 productType 但我可以期待两种不同的返回类型或数据结构。</p><ol><li> 返回ProductType</li><li> return List&lt;ProductType&gt;因为属性名称相同我如何有效地使用 Jackson 注释来解决它?</li></ol><p> 我使用 rest-assured 进行反序列化,使用 Lombok 进行典型的 getter 和 setter。</p></div></object>

[英]Jackson (Java) : deserialization for the same property name but return different objects. for one it return object and second List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM