gpt4 book ai didi

java - 基于参数在父类中使用子类的静态成员

转载 作者:行者123 更新时间:2023-12-02 00:19:45 24 4
gpt4 key购买 nike

我想在多个类中使用相同的静态数据成员,并创建一个父类,我可以根据参数从特定类中调用变量。请引用代码。

对于下面的代码,我的要求是如果我调用

Test.x 给出某种参数,例如 Test1Test2,它应该从相应的类中获取值。有人可以帮我吗?

我不想使用 Builder()CSV 或实例化该类。有没有其他解决办法?

Class Test() {
static int x;
static int y;
static int z;
}

Class Test1() {
static int x = 1;
static int y = 2;
static int z = 3;
}

Class Test2() {
static int x = 4;
static int y = 5;
static int z = 6;
}

最佳答案

不幸的是,静态和继承存在几个问题。

基于类的自定义配置最好在数据(属性、XML)中声明式完成,但可以用代码来完成。基类可以保存所有 child 的 map 配置。

class Base {

private static Map<Class<T extends Base>, Config> configByClass = new HashMap<>();

protected Base(Supplier<Config> configProducer) {
// Could do in constructor:
configByClass.merge(getClass(), (oldk, k) -> {
if (oldk == null) {
return configProducer.get();
}
});
}

protected final Config getConfig() {
// Could do lazy in getter
configByClass.merge(getClass(), (oldk, k) -> {
if (oldk == null) {
return configProducer.get();
}
});
return configByClass.get(getClass());
}
}

class Child1 extends Base {
public Child1() {
super(() -> {
Config config = new Config(1, 3, 4);
...
return config;
});
}

void f() {
}
}

在构造函数内部调用配置提供者有一个小陷阱:子类字段仍然不可用,但您无论如何都不想使用单个对象。

关于java - 基于参数在父类中使用子类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58078657/

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