被调用对象的方法内部,如何"动态"获得调用者(调用对象)的引用。如题:class A{
  f1(){
    B.f2()
  }
}class B{
  static f2(){
  //这里如何动态获得 调用者的引用。
  }
}注意 “调用者”可能是实现某接口的 任何类的实例。
我想问的是:不进行任何参数传递情况下引用 “调用者”类似 Thread.currentThread() 可以获得“调用线程”的引用。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【qzhl】截止到2008-07-01 21:25:52的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:50                       
    结贴的总数量:2                        结贴的总分数:50                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

     public static String getCaller(){
    int i;
    StackTraceElement stack[] = (new Throwable()).getStackTrace();
    for (i=0; i < stack.length; i++) {
    StackTraceElement ste=stack[i];
    System.out.println(ste.getClassName()+"."+ste.getMethodName()+"(...)");
    System.out.println(i+"--"+ste.getMethodName());
    System.out.println(i+"--"+ste.getFileName());
    System.out.println(i+"--"+ste.getLineNumber());
    }
    }
      

  3.   

    你提供的方法 初步来看:
    1 似乎是一个变通的方法。
    2 可我更希望 java 有官方提供的直接语法或方法。但经过思考 我发现你的方法有个逻辑问题:我是希望 类B方法内部 获得 调用它的 A 对象的引用。而你提供的方法如果在 B.f2内部调用 那么这个 Caller 应该是 f2另外 StackTraceElement 我查文档似乎也无法获得对象的引用?感谢回复。
      

  4.   


    class A{
      f1(){
        B.f2(this);   //传递this
      }
    }class B{
      static void f2(A a){   //f2方法加个参数
            a.xxxxxx;
       }
    }
      

  5.   


    显然我 A B 类有某种内在联系。因此我想让 B 类内部 自动引用 A (这是结构需要,是个固定的结构)采用参数化的方法,虽然可以实现,但是没有最大限度的“体现出结构特征”和隐藏不必要的细节(有参数当然就意味着一定意义上的开放)。在我的特定问题上,我又同时需要 B 有一定的独立性。
      

  6.   


    传递的参数可以给予以一定的限制interface Idosomething {
    public void dosomething();
    }class A {

    public void f1() {
    B.f2(getReference());
    }
    public void dosomething() {
    System.out.println("aaa");
    }
    private class Closure implements Idosomething{
    public void dosomething() {
    A.this.dosomething();
    }
    }
    public Idosomething getReference() {
    return new Closure();
    }
    }public class B {

    static void f2(Idosomething A) {
    A.dosomething();
    }

    public static void main(String[] args) {
    new A().f1();
    }
    }
      

  7.   

    只知道JAVA里 楼主这种要求  都不是用JAVA语言写的