我的问题是: Class B{ A a = new A(); a.method1(); }Class A{ public method1(){ 这里得到调用这个方法的B的class,但不通过传递参数的方法 } }
为A写一个构造函数,在A的构造函数中传入B的实例。 class A { private B b; public A(B b){ this.b = b; } public void method1(){ //这里可以使用this.b; } }class B{ public void method2(){ A a = new A(this); a.method1(); } }
不好意思,一上来看错楼主的意思了。 为了能够看到是谁调用的,可以在你的方法中加入如下代码即可: (new Throwable()).printStackTrace();
如果想解释的话,就使用 StackTraceElement[] elements = (new Throwable()).getStackTrace(); 就能获得调用者的class,拿到类后反射就能获得全部信息了。呵呵
在java中 java为每一个.class 全部生成一个唯一的 class对象比如: Class B{ A a = new A(); a.method1(); } Class A{ public method1(){ this.class //就是目前b的class对象 }你是不是想实现java的递归调用马?~~~~你测试一下 我想是没有问题的 但是前提是你必许 实例化该类 }
利用安全管理器,这里给出一个最简单的例子!!public class Caller { public static void main(String[] args) { System.setSecurityManager(new MySecurityManager()); new A().method(); } } class MySecurityManager extends SecurityManager { protected Class[] getClassContext(){ return super.getClassContext(); } }; class A { void method(){ new B().method(); } } class B { void method(){ MySecurityManager sm=(MySecurityManager)System.getSecurityManager(); Class[] cls=sm.getClassContext(); //for(int i=0;i<cls.length;i++) System.out.println(cls[i]); System.out.println(cls[2]+" is Calling me"); } }
Class B{
A a = new A();
a.method1();
}Class A{
public method1(){
这里得到调用这个方法的B的class,但不通过传递参数的方法
}
}
class A {
private B b;
public A(B b){
this.b = b;
} public void method1(){
//这里可以使用this.b;
}
}class B{
public void method2(){
A a = new A(this);
a.method1();
}
}
为了能够看到是谁调用的,可以在你的方法中加入如下代码即可:
(new Throwable()).printStackTrace();
StackTraceElement[] elements = (new Throwable()).getStackTrace();
就能获得调用者的class,拿到类后反射就能获得全部信息了。呵呵
http://www.cn-java.com/target/news.php?news_id=1774
A a = new A();
a.method1();
} Class A{
public method1(){
this.class //就是目前b的class对象 }你是不是想实现java的递归调用马?~~~~你测试一下 我想是没有问题的
但是前提是你必许 实例化该类
}
{
public static void main(String[] args)
{
System.setSecurityManager(new MySecurityManager());
new A().method();
}
}
class MySecurityManager extends SecurityManager
{
protected Class[] getClassContext(){
return super.getClassContext();
}
};
class A
{
void method(){
new B().method();
}
}
class B
{
void method(){
MySecurityManager sm=(MySecurityManager)System.getSecurityManager();
Class[] cls=sm.getClassContext();
//for(int i=0;i<cls.length;i++) System.out.println(cls[i]);
System.out.println(cls[2]+" is Calling me");
}
}