0

こんにちは: 次のメソッドを定義するクラスがあります。

public String abstract getAnimalName(); 

そしてサブクラス

class Ralph extends Animal
{
    public String getAnimalName(){return "RALPH";}
}

Ralph の名前にはステートレス バージョンが 1 つしかないため、"Ralph" の getAnimalName を静的にする必要があります。

したがって、インターフェイスを満足させながら、getAnimalName を静的に実装したいと考えています。これは可能ですか?おそらく、実行時に静的なものをプロキシすることにより、依存性注入または AOP 手法を使用してオブジェクト実装を提供する方法はありますか?

明らかな解決策 (オブジェクト スコープ メソッドで静的メソッドをラップする) は、私の好みでは定型的すぎます。

4

5 に答える 5

4

いいえ、あなたができるのは最後の提案だけです。

これは、設計に疑わしい点があるという警告である可能性があります。

Ralph はインスタンスであるため、 の契約に従う必要がありgetAnimalNameます。

于 2012-01-04T21:39:09.587 に答える
2

あなたは最高のことをするでしょう:

class Ralph extends Animal { 

    private static final String NAME = "RALPH";

    public String getAnimalName(){return NAME;} 
} 

NAMEご希望があれば公開も可能です。

于 2012-01-04T21:42:05.623 に答える
1

設計は確実に見直す必要があります。アーキテクチャに満足している場合は、クラスをシングルトンに変換し、Ralph.getInstance()。getAnimalName()を使用します。

おそらく、これに対する注釈を検討しますか?

@Name("RALPH")
class Ralph extends Animal
{}

Classオブジェクトから注釈を引き出すことができます:http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getAnnotations()

于 2012-01-04T21:45:57.290 に答える
0

メソッドの複数のインスタンスという概念は実際にはありません。Ralph複数のオブジェクトを作成しても、余分なメモリは追加されません。

ただし、メタタイプを作成したい場合があります。

于 2012-01-04T23:00:35.273 に答える
0

コードを次のように変更してみませんか。

class Ralph extends Animal
{
    public static String NAME = "RALPH";
}

class Animal {
    public static String NAME;

}

getAnimalName()メソッドを使用するだけではありません。

于 2012-01-04T21:49:39.363 に答える