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

Java 基于参数在父类中使用子类的静态成员,java,inheritance,static,Java,Inheritance,Static,我想在多个类中使用相同的静态数据成员,并创建一个父类,从中可以根据参数调用特定类中的变量。请参考代码 对于下面的代码,我的要求是如果我调用 Test.x给出某种类型的参数,比如Test1或Test2,它应该从相应的类中获取值。有人能帮我吗 我不想使用Builder(),CSV,也不想实例化该类。还有其他解决办法吗 Class Test() { static int x; static int y; static int z; } Class Test1() {

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

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

Test.x
给出某种类型的参数,比如
Test1
Test2
,它应该从相应的类中获取值。有人能帮我吗

我不想使用
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)中以声明式方式进行, 但它可以在代码中完成。基类可以保存所有子类的映射 配置

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() {
    }
}
类基{
私有静态映射configByClass=new HashMap();
受保护基地(供应商和生产商){
//在构造函数中可以执行以下操作:
configByClass.merge(getClass(),(oldk,k)->{
if(oldk==null){
返回configProducer.get();
}
});
}
受保护的最终配置getConfig(){
//能做懒散的人吗
configByClass.merge(getClass(),(oldk,k)->{
if(oldk==null){
返回configProducer.get();
}
});
返回configByClass.get(getClass());
}
}
类Child1扩展了基{
公共儿童1(){
超级(()->{
配置=新配置(1,3,4);
...
返回配置;
});
}
void f(){
}
}
在构造函数中调用配置提供者有一个小小的缺陷:子类字段仍然不可用,但您无论如何都不想使用单个对象。

公共类测试{
静态int a;
静态int b;
静态int-c;
//要使用test1类的值,请执行以下操作
a=试验1.a;
b=test1.b;
c=test1.c;
//要使用test2类的值,请执行以下操作
a=试验2.a;
b=测试2.b;
c=test2.c;
}
公共类test1{
静态int a=1;
静态int b=2;
静态int c=3;
}
公共类test2{
静态INTA=4;
静态int b=5;
静态int c=6;

}
将父类设置为
abstract
class,或者在子类中设置override并设置值。为什么选择将变量设置为静态?Java类语法是
class{
而不是
class{{
如果这些要求迫使您使用静态成员,以避免创建对象,并将类名作为参数传递,那么这些要求是愚蠢的。@MohamedSaligh-我认为这会起作用。我可以使用接口并声明变量,为实现接口的不同值创建类,在实例化时,我可以只需根据simple if else将接口引用到我想要的类。我认为这会起作用。请让我知道您的想法。:)使用这种方法将增加代码行数。我想要一个简单的解决方案,但也必须记住代码长度