私には非常に特殊な状況があります。状況のコンテキストは、私が Minecraft 用のプラグインを作成していて、設計上の問題が発生したことです。抽象クラス、インターフェース、およびそれらの派生具象クラスの階層を構築しました (問題がある場合は Java で)。構造の一般的な考え方は次のとおりです。
パブリック インターフェイス ICommandUsage、ICommandPattern、IPermissionNode
(これらは、各コマンドがコマンドの適切な使用法を定義し、正規表現と一致する特定のパターンに従い、コマンド送信者がコマンドを使用できるかどうかを許可する許可ノードを持つ必要があるように実装されています)
public abstract class Command = 基本クラス
public abstract class ConsoleCommand = Command クラスの派生サブセット
public abstract class PlayerCommand = Command クラスの派生サブセット
public abstract class UserCommand = PlayerCommand の派生サブセット
public abstract class ServerAdminCommand = PlayerCommand の派生サブセット
残りのクラスは、インターフェイスと抽象クラスから関数を定義するさまざまな具体的な実装です。
これが私のジレンマです。プラグインを開始すると、「メイン」クラスはすべてのコマンドを登録するため、ユーザーがコマンドを発行すると、commandDelegate はパターン マッチングを介してコマンドを解釈できます。パターン マッチングは、メソッド getPattern() から取得されます。このメソッドは、各具象クラスに半ハードコード化された String を返します。
私の論理は、各具体的なクラスが独自のパターン、許可ノード、および使用法を担当する必要があるため、これらのメソッドはクラス自体に存在する必要があるというものです。
主な問題は、メイン クラスにコマンドを登録するときに、コンストラクターに null 引数を渡して「偽の」コマンドを作成する必要があることです...
つまり、registerCommand("console_info", new ConsoleInfo(null, null));
これが悪い習慣であることは認識していますが、解決策を見つけるためにどこを見ればよいのか途方に暮れています。誰かが私を正しい方向に向けることができれば、とても感謝しています。