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将接口引用到我想要的类。我认为这会起作用。请让我知道您的想法。:)使用这种方法将增加代码行数。我想要一个简单的解决方案,但也必须记住代码长度