OO从字符串表示创建对象的方法

时间:2014-02-26 19:15:28

标签: java oop inheritance polymorphism

我喜欢保持我的设计清洁和OO:我有一个抽象的java类(Block),它有一个方法来返回对象的字符串表示,以便能够将它保存到文件中。我还有加载器函数(当前在Block及其子类外部)将对象的字符串表示形式转换回它所在的对象。如果没有if,else if else else if等,我该怎么做... getIdentifier()方法返回一个唯一的字符串,用于标识4字母String中的块类型。我希望保持这种方式以便以后使用。例如,这是源块的“srce”。然后字符串表示为srce,例如1,0,1,1,其中逗号中的参数定义了此特定块的状态。

public abstract class Block{
    public abstract String getIdentifier();
    public abstract String getStringRepr();
}

我想要一种将上面的String表示形式转换为java对象的多态方式。现在,用它的行为(在其他方法中)定义一个新的Block类型很容易,但是对象函数的字符串仍然需要在别处声明,这会让我感到烦恼。

编辑:我不想要对此对象进行不同的序列化。我需要能够使用简洁的,人类可读的格式来制作它们。

2 个答案:

答案 0 :(得分:0)

使用JSON序列化,这是使用Jackson的一个例子:

    // create object mapper
    com.fasterxml.jackson.databind.ObjectMapper objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();

    // write object to file
    Block block = new SomeBlockImpl();
    File outputFile = new File("output location goes here");
    objectMapper.writeValue(outputFile, block);

    // read object from file
    File inputFile = new File("input location goes here");
    Block savedBlock = objectMapper.readValue(inputFile, Block.class);

答案 1 :(得分:-1)

我已经完成了它:我已经添加了另一种抽象方法,该方法使用更高级别的类来注册块的标识符。这将标识符映射到特定的Block类,从而允许我调用正确的构造函数,而不必通过标识符的所有选项。