将动态对象放入数据结构

Put dynamic objects to a data structure

是否可以放置一个对象(可以是任何 class,如原始、盒装或自定义 class)并像自定义 class 一样获取它?

例如;

boolean isPossible;
MyCustomClass mCustomClass;

mSet.put(isPossible);
mSet.put(mCustomClass);

然后像

一样访问它
mSet.isPossible;
mSet.mCustomClass;

或类似的东西。 我需要一个真正用户友好的结构来设置 classes.

之间共享的对象

谢谢

Visitor pattern可以帮到你

这是一些样板文件,但它允许您将不同的代码应用于不同类型的对象。

更现代的解决方案是使用 Scala 和模式匹配。

但是,您真的应该考虑坚持使用几个强制转换和 instanceof-s。

另一种解决方案是将所有内容都放在单个 class 中,就像杰克逊 JsonNode 所做的那样。

如@user1445898 所述,使用强制转换和 instanceof,您可以使用通用 Object 实例的 HashSet,并且根据需要仅 cast/unbox在集合中。

我只是把这个简单的例子放在一起:

import java.util.HashSet;

public class HashSetTest
{
  public static void main(String[] args)
  {
    HashSet<Object> set = new HashSet<Object>();

    CustomClass myObject = new CustomClass("Custom Class Instance");

    set.add(new Integer(1));
    set.add(new Integer(2));
    set.add(new Double(3.123));
    set.add(myObject);


    for (Object o: set){
      if (o instanceof Integer){
        int i = ((Integer)o);  //unbox
        System.out.println("Integer: " + i);

      }
      else if (o instanceof Double){
        double d = ((Double)o); //unbox
        System.out.println("Double: " + d);

      }
      else if (o instanceof CustomClass){
         System.out.println("CustomClass: " + myObject);

      }
    }

  }
}

public class CustomClass
{
  private String message;

  public CustomClass(String input)
  {
    message = input;
  }
  public String toString()
  {
    return message;
  }
}

输出:

CustomClass: Custom Class Instance
Integer: 1
Integer: 2
Double: 3.123