重新申请参数

Sco*_*ott 6 java parameters static pass-by-reference pass-by-value

在查看Selenium源代码时,我在PageFactory中注意到以下内容:

public static <T> T initElements(WebDriver driver, Class<T> pageClassToProxy) {
  T page = instantiatePage(driver, pageClassToProxy);
  initElements(driver, page);
  return page;
}

public static void initElements(WebDriver driver, Object page) {
  final WebDriver driverRef = driver;
  initElements(new DefaultElementLocatorFactory(driverRef), page);
}
Run Code Online (Sandbox Code Playgroud)

拥有以下产品线有什么好处?

final WebDriver driverRef = driver;
Run Code Online (Sandbox Code Playgroud)

将参数设置为final,然后将其传递给下一个方法而不声明新引用是不是有意义?

Luc*_*tti 3

答案是,设置final变量并仅将其用作函数的参数是完全没有用的。在DefaultElementLocatorFactory构造函数中,与输入参数相关的变量可以自由地重新分配,因为它是原始引用的副本。

PS ...当然,除非按照OP的建议,输入参数被声明final