【问题标题】:What's the point of a copied / duplicate reference variable?复制/重复的引用变量有什么意义?
【发布时间】:2011-07-22 19:00:12
【问题描述】:

刚刚看到如下代码:

public static void initElements(WebDriver driver, Object page) {
    final WebDriver driverRef = driver;
    initElements(new DefaultElementLocatorFactory(driverRef), page);
}

谁能告诉我,写这个有什么好处:

public static void initElements(WebDriver driver, Object page) {
    initElements(new DefaultElementLocatorFactory(driver), page);
}

我希望我在这里的第一个问题不是太无意义和/或太愚蠢,你回答它很开心!

(来自org.openqa.selenium.support.PageFactory 的代码引用;版权所有2007-2009 WebDriver 提交者;版权所有2007-2009 Google Inc.)

【问题讨论】:

    标签: java idioms


    【解决方案1】:

    应用程序行为没有区别。然而,这种模式可能会在以下情况下使用:

    • 希望提供更适合此上下文的值的本地名称。这里是driverRef vs driver,它没有带来任何价值,但在其他情况下可能会
    • 想让变量作为调试器的局部变量访问。调试器可能会以不同的方式处理局部变量和类字段(例如,在显示它们的值时),但很难证明永久进行这种更改是合理的
    • 关注可读性。这里替换的表达式很简单 - 只是 driver,但有时您有一个更复杂的表达式,如果内联会使行太长。

    【讨论】:

      【解决方案2】:

      在这种情况下,我看不出任何意义。但我可以看到将变量声明为 final 的观点。所以这就足够了:

      public static void initElements(final WebDriver driver, Object page) {
          initElements(new DefaultElementLocatorFactory(driver), page);
      }
      

      【讨论】:

        【解决方案3】:

        我认为“final”关键字是您问题的答案。

        final 表示不能重新分配引用。

        【讨论】:

        • ... tarlog 以更好的答案击败了我。 ;)
        【解决方案4】:

        如前所述,在您发布的代码中确实没有意义。

        创建变量final 的一个原因是当您想在方法内部的匿名内部类中使用它时。一个变量必须是final 才能在匿名内部类中被访问。一个有点傻的例子,只是为了说明这一点:

        public static void initElements(final WebDriver driver, final Object page) {
            // Anonymous inner class
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    // The variables must be final, otherwise you can't access them here
                    initElements(new DefaultElementLocatorFactory(driver), page);
                }
            };
        
            runnable.run();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-17
          • 2014-08-17
          • 1970-01-01
          • 2011-05-22
          • 2013-03-28
          • 2012-08-07
          • 2011-11-10
          • 2010-09-20
          相关资源
          最近更新 更多