我不熟悉Java / scala中反射的用法。我不清楚为什么我们需要在运行时实例化一个类型。一个例子是最好的。非常感谢。
答案 0 :(得分:0)
我将为您提供运行时类型实例化或类型的一般检查有用的一般示例。想想Plugin Pattern。假设您要创建一个允许用户创建插件的应用程序。您将来不会拥有用户将要制作的插件。在您发布应用程序后,如何使用他们的插件?您需要能够检查其插件以获取应用程序所需的方法,然后调用所述方法。
为了实现这一点,语言设计人员创建了一个平台,您可以在其中查询模块(java中的jar,.net中的程序集)以查找它定义的类型以及它包含的方法,字段等。然后,您可以调用任何方法,实例化您想要的任何类型,并基本上与模块交互,就好像您在编译时拥有模块并且您正在引用它一样(不完全是这样,但您明白了)。
此处以及在运行时发生的方法调用示例。您可以假设我们已经从运行时从配置文件中获取的字符串创建了foo
。 foo
被指定为包含插件类型的jar文件的名称。我不想提供实例化代码,因为它会使它过于臃肿,但这是方法:
Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);
如你所见,我们基本上得到了类foo的类型,我们使用方法的名称查询它的方法然后调用它。通过这样做,我们在运行时使用插件扩展了程序的功能。