gpt4 book ai didi

java - 我如何处理这个困惑的变量阴影?

转载 作者:行者123 更新时间:2023-11-29 07:49:01 24 4
gpt4 key购买 nike

我有一个 SharedFolder 类实现了一个抽象的 Endpoint 类,问题与子类的一个属性 (baseDir ) 取决于在类实例化后更新的另一个属性 (environment) 的值,这就是我所说的:

public class SharedFolderEndpoint extends Endpoint {

private String name = "SharedFolder";
private String hostname = "somehostname";
private Environment environment;
private String baseDir;
private String format = "someformat"
private String pattern = "somepattern";

public SharedFolderEndpoint() {

}
...

basedir 路径取决于环境的值,变量需要用这样的东西初始化:

this.baseDir= "/env-"+this.environment+"/somefolder/files";

该类由 GUI 实例化,然后用户必须选择他/她想要与之交互的环境,因此,如您所见,在此手动交互之前,this.environment 引用一个 null 值。

我想知道是否有一个优雅的解决方案来更新这个值而不创建一个新的方法来将值附加到路径。有什么想法吗?

最佳答案

要向 Taks 答案添加变体(1+),您可以使 baseDir 成为从常量格式字符串构建的“计算”属性,以便字符串的骨架可作为常量快速查看,类似于:

public class SharedFolderEndpoint extends Endpoint {
private static final String BASEDIR_FORMAT = "/env-%s/somefolder/files";
//...


// might need to declare this as throwing the exception
public String getBaseDir() {
if (environment.isPopulated()) {
return String.format(BASEDIR_FORMAT, environment.toString());
} else {
// throw an exception...
}
}
}

此示例仅显示它是使用一个字符串变量 %s 创建的,但添加更多变量将是微不足道的。

例如,如果你想使用文件夹变量和文件变量,你可以这样做:

public class SharedFolderEndpoint extends Endpoint {
private static final String BASEDIR_FORMAT = "/env-%s/%s/%s";
//...


// might need to declare this as throwing the exception
public String getBaseDir() {
if (!environment.isPopulated()) {
// ... throw exception showing no environment
} else {
if (!folder.isPopulated()) {
// ... throw exception showing no folder
} else {
if (!file.isPopulated()) {
// ... throw exception showing no file
} else {
// throw an exception...
return String.format(BASEDIR_FORMAT,
environment.getText(),
folder.getText(),
files.getText());
}
}
}

关于java - 我如何处理这个困惑的变量阴影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22788894/

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