我想通过杰克逊解析一个 YAML 文件,但遇到了其中一个属性(我们称之为"事件"(有一个名为"type"的字符串和一个"属性"对象的问题,该对象因不同的事件而异。我的问题是我需要为此 YAML 定义 POJO。因此,我想定义一个带有 VariableObject 的哈希映射,它可以是一些预定义类中的任何一个(为简洁起见,假设运输和库存(。
我怎样才能实现这样的哈希图?
public class Event {
private static String type;
private static Map<String, VariableObject> properties;
public static void main(String[] args) {
Inventory inventory = new Inventory("inventoryName", 13);
properties.put("Inventory", inventory);
Shipping shipping = new Shipping("shippingName", true);
properties.put("Shipping", shipping);
}
}
public class Inventory {
private static String name;
private static int someNumber;
public Inventory(String name, int someNumber) {
this.name = name;
this.someNumber = someNumber;
}
}
public class Shipping {
private static String name;
private static boolean someBoolean;
public Shipping(String name, boolean someBoolean) {
this.name = name;
this.someBoolean = someBoolean;
}
}
你说的很简单Object
.这是最具体的常见超类:
private static Map<String, Object> properties;
另一种解决方案是使Inventory
并Shipping
实现一些通用接口,例如Named
并将其用作HashMap
中的类型参数。
一种方法是制作Shipping
,Inventory
实现相同的接口(如 cas VariableObject
中的接口(
public class Event {
private static String type;
private static Map<String, VariableObject> properties;
public static void main(String[] args) {
Inventory inventory = new Inventory("inventoryName", 13);
properties.put("Inventory", inventory);
Shipping shipping = new Shipping("shippingName", true);
properties.put("Shipping", shipping);
}
}
public interface VariableObject{
//you can define common methods here if you want
}
public class Inventory implements VariableObject{
private static String name;
private static int someNumber;
public Inventory(String name, int someNumber) {
this.name = name;
this.someNumber = someNumber;
}
}
public class Shipping implements VariableObject{
private static String name;
private static boolean someBoolean;
public Shipping(String name, boolean someBoolean) {
this.name = name;
this.someBoolean = someBoolean;
}
}