2016-04-15 18 views
-2

私はリフレクションによってメソッドを呼び出す方法を知っており、新しいインスタンスを作成します。しかし、私はそれをすることはできません。私のクラスはRunnableインターフェイスを実装したので、私は新しいスレッドでrunメソッドを起動しなければなりません。だからこれは望ましくない。 私のコードは次のとおりです。同じクラスに新しいインスタンスを作成せずにリフレクションで非静的メソッドを呼び出す方法は?

public class Validation() impelements Runnable { 
    Validation (String[] methodName) { 
    if(methodName[2].equals("deposit")){ 
     this.deposit(account); 
    } 
    else if (methodName[2].equals("withdraw")){ 
     this.withdraw(account); 
    } 
    // lots of if-else 
} 
//..... other methods , deposit() , withdraw() , run(); 
} 

私はこのような何か必要があります(クラスの新しいインスタンスを作成せずにそれが反映する必要があります):

UPDATE

置き換える必要がある場合は、他の

私は静的デポジットまたはwを使用できません静的変数を使用しています。私の質問がある

$methodName = $array[2] ; 
$this.methodName(); 

同じで新しいインスタンスを作成せずに反射することによって、非静的メソッドを呼び出すためにどのように我々はこのようにsimethingいるPHP

クラス?

+1

。それは不可能だ。インスタンスメソッドを呼び出すには、インスタンスが必要です。 – Savior

+2

あなたはそれをすることはできません。それについて考えてみましょう。オブジェクトなしでオブジェクトメソッド(その状態を変更できる)をどのように呼び出すことができますか? –

+0

_existing_オブジェクトのリフレクションによってメソッドを呼び出す方法を尋ねていますか? –

答えて

0

これはできません。

ちょっと考えてみましょう。非静的メソッドは、クラスそのものではなくクラスのオブジェクトとリンクされています。

したがって、それらを呼び出すには、classのインスタンスが必要です。

しかし、別の問題ですが、リフレクションを使用して非静的メソッドを呼び出すが、インスタンス化を行わない場合は不可能です。

-1

例外処理は

class ObjectThatImplementsFoo { 
    public void foo() { 
    } 
} 

public void invokeFooOnObject(ObjectThatImplementsFoo foo) { 
    Method m = foo.getClass().getMethod("foo"); 
    m.invoke(foo, null); 
} 

明瞭

ために省略だからあなた "のif-else" より、このような何かに置き換えてください:

あなたがすることはできません
try { 
    Method m = this.getClass().getMethod(methodName[2], account.getClass()); 
    m.invoke(this, account); 
} catch (Exception ex){ 
// something 
} 
関連する問題