2010-12-03 38 views
1

動的に別のメソッドを呼び出す方法を知る方法は可能ですか。Javaメソッドを呼び出す

は、以下を参照してください。

class a { 
     public void one(){ 
      System.out.println(methodWhoCallsVoidOne().getName()); 
     } 

     public void two(){ 
      this.one(); 
     } 
} 
+0

を使用することができますか?メソッドの振る舞いを変更した場合、渡す変数を使用してメソッドの振る舞いを制御することはできませんか? – thejh

+0

ところで、メソッドの呼び出しの前に 'this'を置く必要はありません。 –

答えて

6

ない例外を作成し、それらのうち、スタックトレースを引っ張って周りのハッキングなし。

なぜこれをやりたいのですか?これまで人々がこれを尋ねてきたとき、それはいつもどこかで悪いデザインの兆候でした。

0

あなたは、スタックトレースを取得することができます:

new Throwable().getStackTrace() 

それは最初の1からすべての呼び出し元の配列を返します。

0

EclipseなどのIDEを使用している場合は、ブレークポイントを配置してコールスタックを確認できます。 Javaの呼び出しスタック上Quck Google検索は、thisを上げ:

public class WhoCalledMe { 
public static void main(String[] args) { 
    f(); 
} 

public static void f() { 
    g(); 
} 

public static void g() { 
    showCallStack(); 
    System.out.println(); 
    System.out.println("g() was called by "+whoCalledMe()); 
} 

public static String whoCalledMe() { 
    StackTraceElement[] stackTraceElements = 
    Thread.currentThread().getStackTrace(); 
    StackTraceElement caller = stackTraceElements[4]; 
    String classname = caller.getClassName(); 
    String methodName = caller.getMethodName(); 
    int lineNumber = caller.getLineNumber(); 
    return classname+"."+methodName+":"+lineNumber; 
} 

public static void showCallStack() { 
    StackTraceElement[] stackTraceElements = 
    Thread.currentThread().getStackTrace(); 
    for (int i=2 ; i<stackTraceElements.length; i++) { 
      StackTraceElement ste = stackTraceElements[i]; 
      String classname = ste.getClassName(); 
      String methodName = ste.getMethodName(); 
      int lineNumber = ste.getLineNumber(); 
      System.out.println(classname+"."+methodName+":"+lineNumber); 
    } 
    } 
} 
+0

Thhhx !! =)...あなたはアイデアのペアを与えた –

+0

whoa !?私のコードに何が起こったのですか? - fixed – Casey

2

それともあなたがそれを必要となぜあなたはThread.currentThread().getStackTrace()

+0

これはまだ内部でスロー可能なものを作成し、かなり高価ですが、大部分は機能します –

関連する問題