如何使用不同的对象作为值实现 Java 哈希图



我想通过杰克逊解析一个 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;

另一种解决方案是使InventoryShipping实现一些通用接口,例如Named并将其用作HashMap中的类型参数。

一种方法是制作ShippingInventory实现相同的接口(如 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;
    }
}

最新更新