在Java中,找到从方法内部调用方法的静态对象

在Java中,找到从方法内部调用方法的静态对象,java,Java,我有类似的课程: 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 vo

我有类似的课程:

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函数,如何确定哪个对象 调用打印函数,是MyClass1中的函数,还是MyClass2中的函数


使用堆栈跟踪,我只能找到print方法所在的函数和print方法所在的函数类。

以下代码应该可以工作:

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.");
  }
}
更多信息请访问:或

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
,在
MyClass1
MyClass2
中给
print
一个参数或子类
MyObject
,并覆盖
print

为什么不让这成为对象模型中的一流概念

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);
    }
}

你在设计什么吗?找到一个bug?学习?这样做似乎没有用。为什么需要确定哪个对象正在调用
print()
方法?MyObject类可能包含有关MyClass1或MyClass2的重要信息,并且可能包含更新该信息的函数。有时,知道谁的信息刚刚更新很重要。这只打印包含
doSomething
方法的类的名称,这在问题中已经提到过。您也可以使用
class
对象(
MyClass1.class
MyClass2.class
)代替字符串作为标识符。