0

从现有的代码库。A 类有一个实例变量 A.toBeCalled 作为类型“ToBeCalled”。如何从代码库的整个调用图中找到对它 A.toBeCalled 的所有使用/引用?例如

  • B 类调用 A.getToBeCalled() 并将其存储在其本地 var 中,然后通过调用其方法来使用它。
  • B 类调用 A.getToBeCalled() 并存储在 C 类的实例 var 中,然后 D 类使用 C 类的实例 var。

要求:

  • 在 B 类、C 类、D 类等中调用 A.toBeCalled 对象的方法是什么?
  • 上面的被调用者图

代码示例

Class A {
   ToBeCalled toBeCalled = new ToBeCalled();
   getToBecalled() { return toBeCalled;}
}

Class B {      
  main() {
    A a = new A();
    ToBeCalled toBeCalledInB = a.getToBecalled();
    toBeCalledInB.doXXX();
    C c = new C();
    c.setToBeCalled(toBeCalledInB);
    D d = new D();
    d.start(c);
  }
}

Class C {
  ToBeCalled toBeCalledInC;
  setToBeCalled(ToBeCalled theToBeCalled){
    toBeCalledInC = theToBeCalled;
  }
  getToBeCalled() {
    return toBeCalledInC;
  }
}

Class D {
  start(C c) {
    ToBeCalled toBeCalledInD = c.getToBeCalled();
    toBeCalledInD.doYYY();
  }
}

调用 A.toBeCalled 的 List 方法

  • ToBeCalled.doXXX()
  • ToBeCalled.doYYY()

我已经调查了几个工具作为起点,但是,它们有点粗糙

非常感谢您的帮助。

4

1 回答 1

0

如果我理解你所说的问题interfaces。假设您有MyItf几种方法的接口:

public interface MyItf {
public ToBeCalled getToBeCalled();
public void doXXX();
public void doYYY();
}

通过使用interface ToBeCalled类必须覆盖所有方法。

public class ToBeCalled implements MyItf{

@Override
public ToBeCalled getToBeCalled() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void doXXX() {
    // TODO Auto-generated method stub
}

@Override
public void doYYY() {
    // TODO Auto-generated method stub
    }
}

其他类:

public class ToBeCalled2 implements MyItf{

@Override
public ToBeCalled getToBeCalled() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void doXXX() {
    // TODO Auto-generated method stub
}

@Override
public void doYYY() {
    // TODO Auto-generated method stub
    }
}

最后:

public class Launcher {


public static void main(String[] args) {
    MyItf my = new ToBeCalled();        
    my.getToBeCalled();     
    my.doXXX();     
    my.doYYY();

            my = new ToBeCalled2();     
    my.getToBeCalled();     
    my.doXXX();     
    my.doYYY();
}
}
于 2013-08-01T06:10:52.593 回答