0

さてみんな。これが私の問題です:私は現在、各クラスにgameinfo.classアノテーションを持つ別のクラスを拡張しています(コンパイラでこれを強制する方法はありますか?)

理想的には、拡張しているタイプで次のように呼びたいと思います。

 @GameInfo(name = "Default Minigame", aliases = {"DM"}, pvp = false, authors = {"Tom"},
gameTime = 65, description = "desc")
public class DefaultMinigame extends Minigame {

    public DefaultMinigame(Plugin p) {
        super(p, DefaultMinigame.class.getAnnotation(GameInfo.class));
    }

各クラスで上記を呼び出す必要はなく、代わりにMinigame.classで呼び出す必要があります。「this」を呼び出さずにこれを行うにはどうすればよいですか(スーパータイプが初期化されていないため)

御時間ありがとうございます!(そして、私が言っていることが最も理解しやすい質問ではない場合は申し訳ありません)

4

1 に答える 1

0

サブクラスにアノテーションがあることを強制することはできません。それが重要な場合は、代わりにテンプレートメソッドパターンを使用できます。

ただし、アノテーションを使用する必要がある場合は、サブクラスアノテーションを次のように読み取ることができます。

class Minigame {
    protected Minigame() {
        GameInfo info = getClass().getAnnotation(GameInfo.class);
    }
}
于 2012-11-08T23:47:44.817 に答える