Scala で、オブジェクトを動的にインスタンス化し、リフレクションを使用してメソッドを呼び出す最良の方法は何ですか?
次の Java コードと同等の Scala を実行したいと思います。
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
上記のコードでは、クラス名とメソッド名の両方が動的に渡されます。上記の Java メカニズムはおそらくFoo
およびhello()
に使用できますが、Scala の型は Java の型と 1 対 1 で一致しません。たとえば、クラスはシングルトン オブジェクトに対して暗黙的に宣言される場合があります。また、Scala メソッドでは、あらゆる種類のシンボルをその名前にすることができます。両方とも、名前マングリングによって解決されます。Java と Scala の間の相互運用を参照してください。
もう 1 つの問題は、Scala からの反射 - 天国と地獄で説明されている、オーバーロードとオートボクシングの解決によるパラメーターの一致のようです。