我刚刚看到以下代码:
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.。)
答案 0 :(得分:5)
应用程序行为没有区别。但是,在以下情况下可能会使用此类模式:
driverRef
vs driver
,它没有带来任何价值,但在其他情况下可能driver
,但有时你会有一个更复杂的表达式,如果内联则会使行太长。答案 1 :(得分:3)
在这种情况下,我没有看到任何意义。但我可以看到将变量声明为final的观点。所以这就足够了:
public static void initElements(final WebDriver driver, Object page) {
initElements(new DefaultElementLocatorFactory(driver), page);
}
答案 2 :(得分:1)
我认为'final'关键字是您问题的答案。
final表示无法重新分配引用。
答案 3 :(得分:1)
如前所述,在您发布的代码中,确实没有意义。
创建变量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();
}