オブジェクトが与えられたjava.lang.reflect.Method
場合、メソッドが純粋に機能するかどうかを判断する方法はありますか (つまり、同じ入力が与えられた場合、常に同じ出力を生成し、ステートレスです。つまり、関数は環境に依存しません)。
5 に答える
いいえ、それを行う方法はありません。
リフレクションでは、メソッドの背後にある実際のコードを調べることはできません。
たとえそれが可能であったとしても、実際の分析はおそらく...控えめに言っても難しいでしょう。
いいえ、リフレクションやその他のメカニズムでそれを行う方法はありません。
開発者は、メソッドが機能するかどうかを知っています。たとえば、Spring には@Cacheable
、メソッドが機能しているため、特定の引数セットの結果をキャッシュできるというヒントをアプリケーションに与えるアノテーションがあります。(Spring は、キャッシュ動作を提供するプロキシでオブジェクトをラップします。)
いいえ。リフレクションはメソッドのバイトコードを読み取ることができません。そのため、メソッドが何をするのか、さらにはそれが使用する他のクラスを実際に知ることはできません。
ここでは、反射は役に立ちません。実行時に本当に定義したい場合は、 javap -c classname.class
. しかし、そのようなハッキングは避けたほうがよいでしょう。
メソッドが純粋に機能するかどうかを判断する方法はありますか (つまり、同じ入力が与えられた場合、常に同じ出力が生成されます)。
それがあなたが求めていたものであることはわかっていますが、単体テストがこれに役立つ場合があります。