gpt4 book ai didi

java - 扩展类而不添加任何新字段

转载 作者:行者123 更新时间:2023-11-29 06:49:34 28 4
gpt4 key购买 nike

假设我们有这样一个类:

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 有任何新字段。我想让任何处理此文件的开发人员知道任何其他字段都将被忽略(或不会被识别)等。

最佳答案

Java 语言没有提供防止子类添加字段的内置方法。

您可以编写注释处理器(本质上是 java 编译器的插件)来强制执行此类注释,或者使用反射 api 检查父类(super class)构造函数或单元测试中的子类字段声明。前者提供编译时支持,甚至可能提供 IDE 支持,但比后者更难实现。

后者可能看起来像这样:

public class Super {
protected Super() {
for (Class<?> c = getClass(); c != Super.class; c = c.getSuperClass()) {
if (c.getDeclaredFields().length > 0) {
throw new IllegalApiUseException();
}
}
}
}

您可能希望允许静态字段,并添加更好的错误消息。

关于java - 扩展类而不添加任何新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403857/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com