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

标签 java oop

我有一个 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/

相关文章:

java - hasNextLine() while 循环不退出

java - 传递当前日期

java - tomcat中wtpwebapps和webapps文件夹的区别

c# - 为什么不根据参数类型调用最具体的方法

java - 在java中取消链接复制的实例变量

python - 为什么我的程序没有在控制台输出任何东西(使用 Python 中的面向对象编程)?

java - 解析数字时出现 NumberFormatException

java - Swing 台 - 行

java - 使用泛型在方法调用时从父级转换为子级

javascript - 如何创建用户定义的类型(ala C#)以在 JavaScript 中的对象中使用?