2016-11-08 74 views
0

我有擴展基類的Varchar,Integer和Float的多態類型。Java deserialise json實現抽象對象open closed原理

我不得不將以下內容添加到基類,因此我可以在休息api中使用它。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 
@JsonSubTypes({ 
     @JsonSubTypes.Type(name = "VarcharField", value = VarcharField.class), 
     @JsonSubTypes.Type(name = "IntegerField", value = IntegerField.class), 
     @JsonSubTypes.Type(name = "FloatField", value = FloatField.class) 
}) 
public abstract class Field<T> implements FieldType<T>, Serializable { 

我的問題是,它打破了開放的封閉原則,有無論如何繞過這個,外部配置也許?

+0

解釋開閉原理是如何被打破的。我並不是說它不是,我只是想知道你的問題是什麼。如果你不想枚舉所有的子類,那麼使用'JsonTypeInfo.Id.CLASS'或'JsonTypeInfo.Id.MINIMAL_CLASS'。 – lexicore

+0

每當我需要添加一個新字段時,我將不得不修改抽象類,雖然很輕微,但我覺得應該關閉該類以進行任何修改,這就像配置。 –

回答

1

如果使用JsonTypeInfo.Id.CLASSJsonTypeInfo.Id.MINIMAL_CLASS,則不需要指定子類型。