java 获取方法调用者 的参数
例如:publicclassA{getMethod(){System.out.print();}}publicclassB{test(inti){newA().getMe...
例如:public class A{
getMethod(){
System.out.print();
}
}
public class B {
test(int i){
new A().getMethod();
}
test(String i){
new A().getMethod();
}
}
我想在A中输出具体是哪个 test方法调用了getMethod(),应该怎么处理?
我已经可以获取到B和test了,但是test的参数我还区分不开,怎么区分开两个test?
有没有大神啊?这个问题如何解决? 展开
getMethod(){
System.out.print();
}
}
public class B {
test(int i){
new A().getMethod();
}
test(String i){
new A().getMethod();
}
}
我想在A中输出具体是哪个 test方法调用了getMethod(),应该怎么处理?
我已经可以获取到B和test了,但是test的参数我还区分不开,怎么区分开两个test?
有没有大神啊?这个问题如何解决? 展开
6个回答
展开全部
区分是调用哪个test是由你调用的时候的参数决定的。
例如:调用时test(1),那么你调用的是
test(int i){
new A().getMethod();
}
这个方法
如果调用的时候是test("str")调用的就是
test(String i){
new A().getMethod();
}
了。
例如:调用时test(1),那么你调用的是
test(int i){
new A().getMethod();
}
这个方法
如果调用的时候是test("str")调用的就是
test(String i){
new A().getMethod();
}
了。
更多追问追答
追问
仔细看下我的说明吧,你这个和我说的正好反了,
我是想在getMethod中输出具体是哪个方法调用了getMethod方法
举个例子,我现在写了个公共的方法,我想在这个方法总统计有哪些类的什么方法调用了我写的这个方法,我不可能让别人调用的时候给把这些类名,方法名,参数表什么的给我 给我传递过来
追答
我还是很难理解,会有什么样子的业务需要这样子的场景。我说说我的理解。
我觉得这个统计起来不是这么简单的,同时,就算统计出来了,意义应该不大吧。
第一:Java的 动态加载机制决定,类被使用的时候才会被加载。那就是说,B类可能调用了A类的方法,但是B类并没有被加载,那你这个要不要统计。
第二:就算是B类存在于内存中。那B类的方法应该是存在于方法区的吧。Java的gc是自动回收的。也有可能B类中的某些对象时存在于内存中的,而这个test的方法被回收了啊,那你这个要不要统计呢。
各人愚见,欢迎大神拍砖。
展开全部
分别在两个方法里面输出标志性的东西 不久可以了 如在test(int i)输出1 在test(Sting i)输出2 运行之后看一下输出1还是2
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-23
展开全部
getMethod字符串参数就好了。然后具体的test方法里面传入下参数。。比如int的那个test可以getMethod("intTest方法"+i);
追问
还是和最上面的朋友一样的问题
比如,我现在写了个公共的方法,我想在这个方法中统计有哪些类的什么方法调用了我写的这个方法,我不可能让别人调用的时候给把这些类名,方法名,参数表什么的给我 给我传递过来
追答
。。。这个嘛,暂时不知道。坐等大神回答。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以在getMethod方法里面打印堆栈实现:
Throwable ex = new Throwable();
StackTraceElement[] stackElements = ex.getStackTrace();
if (stackElements != null) {
for (int i = 0; i < stackElements.length; i++) {
System.out.print(stackElements[i].getClassName()+"/t");
System.out.print(stackElements[i].getFileName()+"/t");
System.out.print(stackElements[i].getLineNumber()+"/t");
System.out.println(stackElements[i].getMethodName());
System.out.println("-----------------------------------");
}
}
Throwable ex = new Throwable();
StackTraceElement[] stackElements = ex.getStackTrace();
if (stackElements != null) {
for (int i = 0; i < stackElements.length; i++) {
System.out.print(stackElements[i].getClassName()+"/t");
System.out.print(stackElements[i].getFileName()+"/t");
System.out.print(stackElements[i].getLineNumber()+"/t");
System.out.println(stackElements[i].getMethodName());
System.out.println("-----------------------------------");
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以通过反射机制得到调用者的方法和参数。
追问
具体呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询