問題タブ [visitor-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1154 参照

java - ASTNode の accept() メソッドは何を行い、どのように ASTVisitor を使用しますか?

ASTNodeのメソッドは何をしacceptますか (javadoc はあまり役に立ちませんでした...)、visit(Expression node)メソッドはいつ呼び出されますか? これは、私がそれをどのように使用する必要があるかのサンプルコードです:

ありがとうございました

0 投票する
2 に答える
530 参照

java - ASMを使用したアレイアクセスへのアクセス

ASMAPIを使用してアレイへのアクセスをトレースできるかどうか知りたいのですが。

私の目標は、配列のどのインデックスにいつアクセスするかを決定することです(この部分は簡単です-を使用してSystem.NanoTime())。アクセスされているインデックスを特定する方法が見つかりませんでした。

私は成功せずに次のものを使用しようとしています- visitFieldInsn(クラスの静的および非静的変数の場合)、visitVarInsn(静的および非静的ローカル変数の場合)、およびvisitMultiANewArrayInsn-実際には配列を認識しませんでした。

0 投票する
1 に答える
5844 参照

java - Java を使用してビジター パターンを使用して AST から制御フロー グラフを作成する

JavaCCで既に生成されたAbstract-Syntax-Treeから制御フローグラフを構築するために、LEParserCfgVisitorクラスを実装する方法を理解しようとしています。すでに存在するツールがあることは知っていますが、コンパイラの最終版に備えてそれをやろうとしています。

グラフをメモリに保持するデータ構造が必要であることはわかっており、後で制御フロー分析を実行できるように、各ノードで IN、OUT、GEN、KILL などの属性を保持できるようにしたいと考えています。

私の主な問題は、分岐、ループなどの性質に応じて各ブロック間に正しいエッジを持たせるために、さまざまなブロックを一緒に接続する方法を理解していないことです。つまり、明示的なビジターの作成に役立つアルゴリズム。

これが私の空のビジターです。if、while、基本演算 (+、-、​​x、^、...) などの基本的な言語式で動作することがわかります。

誰か手を貸してくれませんか?

ありがとう!

0 投票する
3 に答える
673 参照

java - 訪問者の実装のための型消去の問題を克服する方法

C#とC ++でいくつかのプロジェクトを行った後、Javaを使い始めています。

私は次のような訪問者インターフェースを設計したかった:

もちろん、これは型消去のために機能しません。(このようなものが必要な理由は、訪問できるアクションのグループごとに異なる訪問者インターフェイスを使用するためです。)

私の頭に浮かぶ唯一の解決策は、インターフェースを宣言することです

その後

これは機能しますが、愚かな繰り返しと大量のファイルであるすべてのActionXVisitor-Interfacesの宣言は望ましくありません...

これをより良くする方法について何かアイデアはありますか?

どうもありがとう!

0 投票する
1 に答える
715 参照

validation - Struts 2: ValidationInterceptor + Visitor を使用した子コレクションの検証

ヘッダーと詳細の関係にある子のコレクションを持つモデル オブジェクトがあり、ヘッダーは 1 つのアクション クラス (およびフォーム) で処理され、詳細は別のアクション クラス (およびフォーム) で編集されます。ヘッダー オブジェクトを保存するときに、ヘッダーからオブジェクトのグラフ全体を完全に検証できるようにしたいと考えています。ヘッダーの-validation.xml: 内で既にビジターを宣言しています (このプロジェクトでは XML 検証を使用しています)。

詳細クラスにも適切な検証があります。

この特定のオブジェクト グラフを別のグラフから作成/事前設定することもあります。ただし、事前入力では、必須フィールドなどの一部が空のままになります。

何が起こるかというと、save メソッドの実行時に送信されるフォームであるため、ヘッダーのみが検証されます。実際には、詳細のヘッダー フォームにフォーム要素が含まれていない場合でも、(宣言したビジターを介して) 詳細の検証を強制することは可能ですか?

DRY に保ちたいので、ヘッダー アクションの validate() メソッド内で明示的な検証を行う必要はありません。

0 投票する
3 に答える
188 参照

java - すべての引数が同じインターフェースを実装するオーバーロードされたメソッドの呼び出し

私の出発点は次のとおりです
。-渡される引数のタイプに応じて異なる動作をするようにオーバーロードしたメソッドtransformがあります(transform(A a1、A a2)およびtransform(A a1、B b)を参照)以下の私の例では)
-これらの引数はすべて同じインターフェイスXを実装しています

その変換メソッドを、すべてXインターフェイスを実装しているさまざまなオブジェクトに適用したいと思います。

私が思いついたのは、transform(X x1、X x2)を実装することでした。これは、変換の関連するバリアントを適用する前に、各オブジェクトのインスタンスをチェックします。

それは機能しますが、コードは醜いようで、これらのさまざまなインスタンスの評価とキャストのパフォーマンスのオーバーヘッドも心配しています。その変換は、Javaで実行できる最善の方法ですか、それとも同じ動作を実現するためのよりエレガントで効率的な方法がありますか?

以下は、BAを印刷する簡単な実例です。そのコードを改善する方法の例を探しています。私の実際のコードでは、当然、「transform」の実装が多く、以下のように簡単なものはありません。

0 投票する
1 に答える
2424 参照

design-patterns - ビジターパターンとコンパイラコード生成、子属性を取得する方法は?

現在のアプローチでは、対応するコードを生成する前に子の実際のタイプをチェックするために複数の条件ステートメントを使用する必要があるため、ビジターパターンを使用するようにコンパイラのコードジェネレータを変更したいと思います。ただし、訪問後に子の属性を取得するのに問題があります。たとえば、バイナリ式では次のように使用します。

ビジターパターンでは、visitメソッドは通常無効であるため、LHSおよびRHSから式コードを取得できません。式コードの生成は再帰的であり、変数に保持されている以前の値を消去する可能性があるため、共有グローバル変数を保持することはオプションではありません。

これは(今のところ)最も複雑な部分であるため、バイナリ式を示します。

あなたがそれを理解することを願っています:)

0 投票する
1 に答える
571 参照

c# - 訪問者パターン アイテム トラッカー

次のようなインターフェースを使用した訪問者パターンの実装では (インターフェース自体が間違っていると思われる場合はお気軽に教えてください)、訪問したすべてのアイテムのリストを追跡する責任は誰にありますか? ビジターかビジタブルか?具体的には、トラッカーは、同じアイテムが 2 回アクセスされないようにする必要もあります (アクセスしているグラフに循環参照が含まれている場合)。

0 投票する
1 に答える
360 参照

java - その場でのクラス派生 - 訪問者パターン

そんな風にビジターパターンを作りたい

等々

それから私は工場を作りたいです

次の方法で呼び出すことができます

このアプローチでは、Visitor インターフェイスの accept() メソッドを実装するすべての Bean に対してコマンド抽象クラスを作成する必要はありません。

このソリューションは、クラス階層ごとのサービス ファクトリに応じて、特定のメソッドに共通の動作を持たせたい場合にも使用できます。

標準のjdkでそれを行う方法はありますか、それともcglibなどの外部ツールを使用する必要があるのでしょうか、それとも私が言っていることはゴミであり、他の方法でその目標を達成することができます.

高度な送信

0 投票する
2 に答える
1395 参照

jaxb - JAXB で生成されたクラスを Visitor パターンに参加させるにはどうすればよいですか?

皆さん、うまくいけば、ここでとても簡単なものになります。

スキーマから JAXB を使用してクラスを生成していますが、それらをビジター パターンで処理できるようにしたいと考えています。

そのためには、定義したインターフェイスを実装し、非常に単純なメソッドを追加するために、JAXB で生成されたすべてのクラスが必要だと思うので、単純な例は次のようになります。

デフォルトのクラス:

希望クラス:

これは可能ですか?可能である場合、どのようなオプションがありますか? (スキーマを変更し、実行時のバイトコードを操作し、JAXBContext を何らかの方法で操作します...)

ベンダー固有の拡張機能に依存しないことが理想的です。

ありがとう!