6

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);
}

次の行を持つことの利点は何ですか?

final WebDriver driverRef = driver;

パラメータをfinalにして、新しい参照を宣言せずに次のメソッドに渡すのは理にかなっているのではないでしょうか。

4

2 に答える 2

3

答えはfinal、変数に設定し、それを関数の引数としてのみ使用することはまったく役に立たないということです。コンストラクターではDefaultElementLocatorFactory、入力引数に関連する変数は、元の参照のコピーであるため、自由に再割り当てできます。

PS ...もちろん、OPで示唆されているように、入力引数が代わりに宣言されていない限りfinal

于 2012-06-11T16:19:28.103 に答える
2

私が思いつくことができる最善のこと(セレンの開発者がJavaの仕組みについて基本的な理解以上のものを持っているという仮定の下で-私はそれが与えられていると思います):

おそらく、DefaultElementLocatorFactoryクラスが存在する前は、メソッドは匿名の内部関数を使用しており、コードがリファクタリングされたときに、いくつかの部分が見落とされていました。

于 2012-06-11T16:36:40.760 に答える