Classパラメータを受け取るメソッドを呼び出す必要があります。
public action(Class<? extends SomeInterface> classVariable);
私はこれを行うことができます:
action(new SomeInterface() {
// implement interface
}.getClass());
しかし、オブジェクトをインスタンス化して呼び出しずに逃げることはできますgetClass()か?
Classパラメータを受け取るメソッドを呼び出す必要があります。
public action(Class<? extends SomeInterface> classVariable);
私はこれを行うことができます:
action(new SomeInterface() {
// implement interface
}.getClass());
しかし、オブジェクトをインスタンス化して呼び出しずに逃げることはできますgetClass()か?
インスタンスなしで匿名クラスにアクセスするにはどうすればよいでしょうか? どういうわけかそれを参照するには名前が必要ですが、定義上はありません(実行時にコンパイラが生成した名前があることを確認しますが、最初に作成する必要があることを照会するには、インスタンス化せずに作成することはできません)それ)。
したがって、あなたが望むものを達成する方法はありません。
多分あなたはこれを探していますか?
action(SomeInterface.class);
これはあなたが探しているものかもしれませんが、匿名クラスはまったく関係ありません。
actionメソッドがクラス参照で何をするかについての詳細が役立つ場合があり ます。
次のことができるはずです。
public void action(Class<? extends SomeInterface> classVariable);
次に呼び出します。
action(new SomeInterface() { // implement interface }.getClass());
コード例:
interface I {}
class A implements I
{
}
public void action(Class<? extends I> c)
{
}
public void test()
{
action(new I() {}.getClass());
}
匿名クラスは名前で安全に参照できませんが、インスタンスのみです。名前を予測してそれを使用することはできますが、エレガントではなく、信頼性もありません。
private void neverCalled() {
SomeInterface si = new SomeInterface() {
// implement interface
};
}
Class anon = Class.forName(getClass()+"$1"); // hopefully its the first!
クラスに名前を付けて使用する方がはるかに簡単です。多くの IDE では、一方を他方に非常に簡単に変更できます。