在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
)代替字符串作为标识符。