该问题必须用Java解决,它如下:
假设我们有两个类A和B,每个类分别仅包含方法foo1()
和foo2()
。
A和B不包含任何变量,也不扩展\实现任何类\接口。
目的是为fun1()
找到一种方法来识别它是否从fun2()
内部被调用。
只能在fun1()
和fun2()
内部进行更改。
仅允许使用标准Java库(例如java.math
,java.util
等)。
到目前为止,我已经设法找到2种可能的解决方案,它们是:
使用System.setProperty(...)
和System.getProperty()
在下面添加了实现此想法的代码。
创建文件并对其进行读\写操作。
//The structure of the classes
class A {
public void fun1() {
//...code goes here
}
}
class B {
public void fun2() {
//...code goes here
}
}
//implementation of solution 1)
class A {
public void fun1() {
if(System.getProperty("fun2").equals("yes")) {
//called from fun2
}
else {
//called from somewhere else
}
}
}
class B {
public void fun2() {
System.setProperty("fun2", "yes");
new A().fun1();
System.setProperty("fun2", "no");
}
}
我真的很想看到其他解决此问题的方法。
P.S。可以假设fun1()
不会递归地调用自己。
(例如,在fun1()
被fun2()
调用后调用自身的情况下,我的解决方案将是不正确的,因为它仍会认为该调用是由fun2()
进行的。)
EDIT :如果可以再次查看该问题以进行重复,我将不胜感激,因为我正在寻找各种不同的答案\解决方案。
提供的重复链接中的问题已得到回答,并且仅包含一个有效的(限制性明智的)方法(getStackTrace())。
(还有另一个,但是它使用了sun库)