gpt4 book ai didi

java - 如何在不更改静态限定符的情况下向具有静态方法的类提供参数?

转载 作者:行者123 更新时间:2023-11-30 06:50:39 24 4
gpt4 key购买 nike

我有一个带有静态方法的类:

public class CompletelyStatic {

public final static String PARAM = "abc";

public static String doSomethingSpecial() {
return "qqq" + PARAM;
}

}

这些方法在整个代码中无处不在。新要求是从外部配置加载 PARAM 值。此配置是通过 Config 对象通过依赖注入(inject)提供的,即

public class CompletelyStatic {

@Inject
private Config configProvider;

public final static String DEFAULT_PARAM = "abc";

public String doSomethingSpecial() {
return "qqq" + configProvider.getSpecialParam(DEFAULT_PARAM);
}

}

不幸的是,在这里我不得不更改 doSomethingSpecial 上的静态限定符,所以在我使用它的任何地方,我都必须注入(inject)一个 CompletelyStatic 实例。我宁愿避免这种情况。我可能会做这样的事情:

public class CompletelyStatic {

public final static String DEFAULT_PARAM = "abc";

public static String doSomethingSpecial(Config configProvider) {
return "qqq" + configProvider.getSpecialParam(DEFAULT_PARAM);
}

}

但是如果 doSomethingSpecial 在下面调用了一些私有(private)方法,我将不得不一起传播 configProvider。有更好的解决方案吗?

编辑。如果 CompletelyStatic 有一些内部私有(private)方法,我应该将 configProvider 传播给它们:

public class CompletelyStatic {

public final static String DEFAULT_PARAM = "abc";

public static String doSomethingSpecial(Config configProvider) {
return "qqq" + otherMethod(configProvider);
}

private static String otherMmethod(Config configProvider) {
return "more logic " + configProvider.getSpecialParam(DEFAULT_PARAM);
}
}

编辑 2. 澄清一下,我对 Config 对象没有影响。我知道如果它有静态方法会很好,但它没有。

最佳答案

你可能需要做这样的事情:

public class CompletelyStatic {

@Inject
private Config configProvider;

// Keep a static private instance of your Static class
private static CompletelyStatic cs = new CompletelyStatic();

//If needed, make the constructor of your class private
private CompletelyStatic(){
}

public final static String DEFAULT_PARAM = "abc";

public static String doSomethingSpecial() {
return "qqq" + cs.getConfigProvider().getSpecialParam(DEFAULT_PARAM);
}

public Config getConfigProvider(){
return configProvider;
}
}

您的其他私有(private)方法将能够以类似的方式使用 configProvider 对象:cs.getConfigProvider()

Update

public class CompletelyStatic {

public final static String DEFAULT_PARAM = "abc";

//Keep a static reference to the ConfigProvider object.
private static Config configProvider;

public static String doSomethingSpecial(Config configProvider) {
CompletelyStatic.configProvider = configProvider;
return "qqq" + otherMethod(configProvider);
}

// Here, you will not need to parameterize your other methods.
private static String otherMmethod() {
return "more logic " + configProvider.getSpecialParam(DEFAULT_PARAM);
}
}

希望这对您有所帮助!

关于java - 如何在不更改静态限定符的情况下向具有静态方法的类提供参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41181184/

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