C#とC ++でいくつかのプロジェクトを行った後、Javaを使い始めています。
私は次のような訪問者インターフェースを設計したかった:
public interface ActionVisitor<A> {
void visitAction(A action);
}
public interface MySmallActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>
{
}
public interface MyFullActionVisitor
extends ActionVisitor<ActionA>,
ActionVisitor<ActionB>,ActionVisitor<ActionC>,ActionVisitor<ActionD> //....
{
}
もちろん、これは型消去のために機能しません。(このようなものが必要な理由は、訪問できるアクションのグループごとに異なる訪問者インターフェイスを使用するためです。)
私の頭に浮かぶ唯一の解決策は、インターフェースを宣言することです
public interface ActionAVisitor {
void visitAction(ActionA action);
}
public interface ActionBVisitor {
void visitAction(ActionB action);
}
//...
その後
public interface MySmallActionVisitor
extends ActionAVisitor, ActionBVisitor
{
}
これは機能しますが、愚かな繰り返しと大量のファイルであるすべてのActionXVisitor-Interfacesの宣言は望ましくありません...
これをより良くする方法について何かアイデアはありますか?
どうもありがとう!