我想知道下面的代码是否违反了开放封闭原则。
Animal
是 Dog
的父类,但是 Animal
拥有 Jackson 注解来帮助 ObjectMapper
序列化和反序列化这些类。任何继承 Animal
的人都只需要编辑 Animal
上存在的注解,以确保序列化和反序列化按预期工作而不会修改该类。@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
// all subclasses
@Type(value = Dog.class, name = "dog")
})
public abstract class Animal {
// fields, constructors, getters and setters
}
public class Dog extends Animal {
}
cost
不是太高。但每个人都应该为自己定义cost
。 - Michał ZioberMixIn
之外,还有另一种解决方案。@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") public abstract class Animal { // fields, constructors, getters and setters } @JsonTypeName(value = "Dog") public class Dog extends Animal { }
- Raghavendra M DaniJsonTypeInfo
注释,所有子类将突然破裂。 您不能强制要求后代具有此注释,也无法强制要求根类具有此注释,因为接口/类没有被破坏。它包含相同的方法。API
相同,但某些东西不起作用。超过50%的问题都出现在SO
上。 - Michał Ziober