【发布时间】:2018-11-21 01:00:05
【问题描述】:
假设我们有这样一个类:
class Bar {
boolean b;
}
class Foo {
String zoo;
Bar bar;
}
然后我们有一个扩展 Foo 的类:
class Stew extends Foo {
public Stew(Bar b, String z){
this.bar = b;
this.zoo = z;
}
}
我的问题是 - 有什么方法可以防止 Stew 拥有任何不在 Foo 中的非方法字段?换句话说,我不希望Stew 有任何字段,我只想让Stew 实现一个构造函数,也许还可以实现一两个方法。
也许有一个我可以使用的注释,可以做到这一点?
类似:
@OnlyAddsMethods
class Stew extends Foo {
public Stew(Bar b, String z){
this.bar = b;
this.zoo = z;
}
}
目的 - 我要将Stew 序列化为 JSON,但我不希望 Stew 有任何新字段。我想让任何处理此文件的开发人员知道任何其他字段都将被忽略(或无法识别)等。
【问题讨论】:
-
在编译时?在运行时?为什么您认为字段是需要预防的问题?
-
问题是为什么你需要
Stew to extend Foo,在此之前你为什么需要bar和zoo在Foo 中?您始终可以选择拥有一个不需要初始化父类属性的构造函数。这就是你要找的东西吗? -
如果你走注解路线,你可以创建一个注解处理器,如果你用相应的注解声明类中的任何字段,就会发出错误。这会在编译期间发生。
-
@AlexanderMills 我得到了问题陈述,只是想标记问题相关。另外,为什么在这种情况下
Stew甚至从设计角度扩展Foo? -
@AlexanderMills 不,我不知道。您可以在
Foo本身中生成提供的构造函数。如果这不可能,我宁愿先尝试解决这个问题。
标签: java json serialization java-8