以下java中的情况
在当前类中说有一个方法调用returnStr,并且此方法将返回一个String,并且此方法可能在其他类中作为参数调用,所以有什么方法可以帮助我找出哪个类调用此方法?
public class MyClass {
public String returnStr() {
// System.out.println("which class invokes me @_@")
return "ABC";
}
}
class D {
public void printStr(String str) {
System.out.println(str);
}
}
class B {
public void printStr(String str) {
System.out.println(str);
}
}
class C {
public void printStr(String str) {
System.out.println(str);
}
}
public class Test {
public static void main(String... args) {
MyClass myClass = new MyClass();
A a = new A();
B b = new B();
C c = new C();
a.printStr(myClass.returnStr());
b.printStr(myClass.returnStr());
c.printStr(myClass.returnStr());
}
}
如上面的代码,有没有办法帮我打印A,B,C这三个类的名字?我试图获取StackTrace数组,但我只能获得调用returnStr()的名称“Test”。
提前致谢。
答案 0 :(得分:0)
您可以使用Eclipse或IntelliJ Idea等IDE。他们有这样的功能。
答案 1 :(得分:0)
即使你修复了复制/粘贴错误 * 之后,也绝对没有办法做你想做的事情:Test
类在这里进行所有调用;它传递从myClass
到A
,B
和C
的结果 在调用MyClass
时在堆栈上。
可以说,没有理由让方法找到它的调用者:通常,方法(和过程语言中的函数)提供旨在隐藏调用者的逻辑的抽象级别,并将调用者与逻辑隔离(除非他选择通过参数“宣布”自己。
这应该会引导您找到一个解决方案:由于该方法无法确定其输出将被路由到谁,调用者应该在参数中传递此信息,如下所示:
public String returnStr(String whosCallingMe) {
System.out.println(whosCallingMe);
return "ABC";
}
现在调用这样的方法:
a.printStr(myClass.returnStr("A"));
b.printStr(myClass.returnStr("B"));
c.printStr(myClass.returnStr("C"));
<小时/> * 所有三个调用都转到
A
类型的对象,因为您忘记在复制的代码中将a.printStr
替换为b.printStr
和c.printStr
/pasted.
答案 2 :(得分:0)
简单的方法:
ThreadLocal
传递此特定班级的被叫方。缺点是它是一个单线程解决方案。答案 3 :(得分:0)
尝试此操作,将类的实例传递给returnStr()以从调用方法的位置获取类。以下所有文件都在同一个软件包下。
ParameterInstance .java
public class ParameterInstance {
public String returnStr(Object obj) {
// System.out.println("which class invokes me @_@")
System.out.println("Class is :: " + obj.getClass());
return "ABC";
}
}
class A {
public void printStr(String str) {
System.out.println(str);
}
}
class D {
public void printStr(String str) {
System.out.println(str);
}
}
class B {
public void printStr(String str) {
System.out.println(str);
}
}
class C {
public void printStr(String str) {
System.out.println(str);
}
}
<强> Test.java 强>
public class Test {
public static void main(String... args) {
ParameterInstance myClass = new ParameterInstance();
A a = new A();
B b = new B();
C c = new C();
a.printStr(myClass.returnStr(a));
b.printStr(myClass.returnStr(b));
c.printStr(myClass.returnStr(c));
}
}