0

私はこれらのようなクラスを持っています:

class MyClass1 {

  static MyObject obj = new MyObject();

  public static void doSomething()
  { 
    MyClass1.obj.print();
    MyClass2.obj.print();
  } 

}    

class MyClass2 {

  static MyObject obj = new MyObject();

  public static void doSomething()
  {
    MyClass1.obj.print();
    MyClass2.obj.print();
  }

}

public class MyObject {

  public void print()
  {
    System.out.println("Which object called me?");
  }

}

MyObject の print 関数から、どのオブジェクトが print 関数を呼び出したか、MyClass1 のオブジェクト、または MyClass2 のオブジェクトをどのように判別できますか?

スタック トレースを使用して、印刷メソッドが内部にある関数と、印刷メソッドが内部にある関数のクラスのみを見つけることができました。

4

3 に答える 3

0

これをオブジェクト モデルの第一級の概念にしてみませんか?

class MyClass1 {
    private static MyObject obj = new MyObject("MyClass1");
    public static void doSomething() {
        MyClass1.obj.print();
        MyClass2.obj.print();
    }
}

class MyClass2 {
    private static MyObject obj = new MyObject("MyClass2");
    public static void doSomething() {
        MyClass1.obj.print();
        MyClass2.obj.print();
    }
}

class MyObject {
    private final String name;
    MyObject(String name) {
        this.name = name;
    }

    public void print() {
        System.out.println("Q: Which object called me?");
        System.out.println("A: " + name);
    }
}
于 2012-07-22T00:13:49.057 に答える
0

ただ

public void print()
{
    System.out.println("Which object called me?");
    if (MyClass1.obj == this) {
        System.out.println("MyClass1");
    } else if (MyClass2.obj == this) {
        System.out.println("MyClass2");
    }
}

...両方の obj フィールドが初期化されている限り。

でも、うーん、私はこれをしません。MyObject構築時にこれを伝え、andおよび overrideでprintパラメーターまたはサブクラスを指定することをお勧めします。MyObjectMyClass1MyClass2print

于 2012-07-21T23:57:57.033 に答える
-1

次のコードが機能するはずです。

public class MyObject {
    public static void main(String... args){
        MyClass2.doSomething();
    }


  public void print()
  {
    System.out.println(Thread.currentThread().getStackTrace()[2].getClassName() + " has me called.");
  }
}

詳細については、http: //download.oracle.com/javase/6/docs/api/java/lang/StackTraceElement.htmlまたはGet current stack trace in Javaを参照してください。

于 2012-07-21T23:57:56.697 に答える