私はビジター パターンに少し慣れていませんが、ビジターの実装が必要なタスクがあります ("instanceof" チェックを回避したい場合)。
ラベル、パネル、ウィジェット(チェックボックス、リストボックス、テキストボックスなど)のいくつかのgwt要素のラッパーであるクラスがあります。UI の類似部分のコレクションとして配列を使用します。例: ラベル + チェックボックス、ラベル + テキスト ボックス。ラベル+ボタン等
一部の要素は異なる方法で構築されます (たとえば、Panel から派生した別のクラスの一部)。その結果、同じコンストラクターが 2 つありますが、オーバーロードされたメソッドが 1 か所で使用されています。これらのコンストラクターをマージし、前述のメソッド内で「instanceof」を使用して要素をチェックできます。しかし、私はこの解決策が嫌いで、訪問者パターンを使用して置き換えたいと考えています。実を言うと、私はそれを行う方法がわかりません。あなたの助けを願っています。
これが私が持っているものの例です:
public class MyWidgets {
    private String stringLabel;
    private Widget widget;
    private Panel panel;
    public MyWidgets(String stringLabel, Widget widget) {
      this.stringLabel = stringLabel;
      this.widget = widget;
      initPanel(stringLabel, widget);
    }
    public MyWidgets(ConstructedClass cs, Widget widget) {
       this.widget = widget;
       initPanel(cs, widget);
    }
    private initPanel(String label, Widget widget) {
      panel = SomeStaticUtilityClass.initPanel(new Label(label), widget);
    }
    private initPanel(ConstructedClass cs, Widget widget) {
      panel = SomeStaticUtilityClass(cs, widget);
    }
}
このようなもの(私はそれを最大限に抽象化しようとしましたが、実際にはもっと難しいです)。
したがって、「instanceof」を使用したソリューションがあります。
private initPanel(Object object, Widget widget) {
  if(object instanceof String) {
    panel = SomeStaticUtilityClass.initPanel(new Label(label), widget);
  }
  if(object instanceof ConstructedClass) {
    panel = SomeStaticUtilityClass.initPanelFromObject(cs, widget);
  }
}
「instanceof」から保存され、コンストラクターを 1 つだけ残し、可能であれば、オーバーロードされたバージョンのない init メソッドを 1 つ残したいと考えています。ご提案、ご協力ありがとうございます。
PS> 繰り返しますが、上記のクラスは偽造されており、特にこの String ラベルでは誤解が生じているようです :)