2012-05-01 1 views
2

Javaリフレクションでメソッドが見つからない場合に例外をスローしないgetMethodやその他のメソッドを呼び出す方法はありますか?たぶん、代わりにnullを返しますか?Reflection getMethod例外を発生させずに

予想される例外を減らすためにアプリケーションを通過していますが、これは候補のようです。

+3

確かに、自分のメソッドで呼び出しをラップすると、何でもできます。 – Perception

+3

'try-catch'ブロックの何が問題なのですか? – beerbajay

+0

多分私はこれについて間違っていますが、予想される例外はコード臭のように感じます。 –

答えて

3

あなたは(getMethodsを反復処理することができます)とリターン一致が見つからない場合はnullとなります。

+1

私はこの解決策とキャッシュに行きます。ありがとう。 –

+1

Reflection APIは独自のSoftReferencedキャッシュも使用します。 –

0

まだ読んでいない場合は、articleをチェックしてください。

Androidデベロッパーのサイトでは、try-catchブロックを使用してこの効果を達成することに問題はないようです...あなたはうまくいくはずです。複数のSDK間の互換性は、あなたの主な関心事である場合は、次のようにif-elseブロックでコードをラップすることによって、すべて一緒に反射を避けることができるかもしれません

if (currentAPIVersion >= android.os.Build.VERSION_CODES.FROYO){ 
    // Do something for froyo and above versions 
} else{ 
    // do something for phones running an SDK before froyo 
} 
1

用途に応じて、おそらくgetMethods()を使用するのが適切です。あなたのクラスに定義されているすべてのメソッドの配列を返します。このマップは、メソッドを名前で返したり、好きなように使用したりできます。ただし、必要なメソッドでのみgetMethod()を呼び出すよりも時間がかかることがあり、最終的に例外をキャッチすることに注意してください。いくつかのキャッシングはこの場合に役立ちます。

+0

@Peter:本当に似たような答えを申し訳ありません、あなたの文章を読んでいないだけです... –

関連する問題