我喜欢保持我的设计清洁和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类型很容易,但是对象函数的字符串仍然需要在别处声明,这会让我感到烦恼。
编辑:我不想要对此对象进行不同的序列化。我需要能够使用简洁的,人类可读的格式来制作它们。
答案 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类,从而允许我调用正确的构造函数,而不必通过标识符的所有选项。