1

自分自身をインスタンス化したクラスで知ることは可能ですか?私は他の多くのクラスによってインスタンス化できるクラスListenerを持っているので、Listener内で、誰が「父」であるかを知ることができます。

使いたくない

if(objectA instanceOf Class)
....

しかし、私はこのようなものだと思います:

if(this.instanceOf Class1)
    System.out.println("Hello i'm the class Listener instanced by Class1);
else if(this.instanceOf Class2)
    System.out.println("Hello i'm the class Listener instanced by Class2);

これは可能ですか、それとも私はばかですか?;)ニコラに感謝します

4

3 に答える 3

1

コンストラクターを呼び出したオブジェクトのクラスを探しているだけの場合、この質問が探しているものである可能性があります。コンストラクターでスタックトレースを取得し、それを使用して、コンストラクターと呼ばれるクラスを判別します。

クラスではなく特定のオブジェクト参照を探している場合は、それをパラメーターとして渡す必要があります。

于 2013-01-05T19:16:44.057 に答える
1

.これを行うことはできますが( - を削除するだけですthis instanceof ClassA)、私には悪い習慣のように思えます。サブクラスに依存する動作が必要な場合は、各サブクラスにメソッドを実装し、この時点でそれを呼び出します。

例えば:

public class Parent
{
    public void foo()
    {
        bar();
    }

    public void bar()
    {
        System.out.println("Parent");
    }

    public static void main()
    {
        new Parent.foo(); // prints "Parent"
        new SubA.foo();   // prints "SubA"
        new SubB.foo();   // prints "SubB"
    }
}

public class SubA extends Parent
{
    @Override public void bar()
    {
        System.out.println("SubA");
    }
}

public class SubB extends Parent
{
   @Override public void bar()
    {
        System.out.println("SubB");
    }
}
于 2013-01-05T19:17:10.343 に答える
1

私が正しく理解していれば、どのクラス(およびそれらのクラスのインスタンス)にListenerクラスのインスタンスへの参照が含まれているのかを知りたいと思います。

考えられる解決策の1つは、すべての「リスナーホルダー」が持つ必要のあるメソッドを定義するインターフェイス(ListenerHolderなど)を作成し、リスナーのコンストラクターでそのインスタンスを受け入れることです。

public interface ListenerHolder {
    public void doSomething();
}

public class Listener {
    public Listener(ListenerHolder holder) {
        this.holder = holder;
    }

    public void doListener() {
        this.holder.doSomething();
    }

    private ListenerHolder holder;
}

そうは言っても、おそらくあなたはあなたが解決しようとしている本当の問題が何であるかを説明することができます。私はあなたが考慮すべき元の問題に対する他の可能な解決策があると思います。

于 2013-01-05T19:18:18.213 に答える