将动态对象放入数据结构
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
是否可以放置一个对象(可以是任何 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