ビルダーパターンを介して設定パラメータの順序を強制する方法

細胞:

最近、私は、パラメータ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のビルドシステムをどうするのが最も簡単ですが、別のツールを使用することができなかった理由がないことから、)どのチェックメソッドの呼び出し順。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=211676&siteId=1