細胞:
最近、私は、パラメータAが設定されていない限り、ユーザはパラメータBを設定することができないような方法で、Builderパターンを実装するためのインタビューで頼まれました。
私は、ビルダーを構築する際に必要なパラメータとしてAを渡すことを示唆したが、彼は私の答えに満足していませんでした。私はまた、Bを設定するときにAが設定されていない場合IllegelStateExceptionをスローするように提案したが、再び、彼は満足しませんでした。誰もが、彼はBを設定する前にどのように我々は集合Aにユーザーを強制することができ勧めてもらえますか?
class Example{
private int A;
private int B;
public static class Builder{
}
}
アンディ・ターナー:
プレーンJavaでそれを行うには、あなたが別のビルダークラス、Aを設定するための最初を作成する必要があり、すると返される値は、Bを設定するためのものである第二ビルダーのインスタンスであります
このアプローチの限界の一つは、それが非常に冗長であり、オプションのパラメータの多くを持つことにうまくスケールしないということです。
また、私はコンパイラプラグインを書くことで、これを行っている(私が使用したエラーが発生しやすいことが、Googleのビルドシステムをどうするのが最も簡単ですが、別のツールを使用することができなかった理由がないことから、)どのチェックメソッドの呼び出し順。