Reflection 为什么我们需要在运行时实例化一个类型?

Reflection 为什么我们需要在运行时实例化一个类型?,reflection,Reflection,我不熟悉Java/scala中反射的用法。我不太清楚为什么我们需要在运行时实例化一个类型。最好举个例子。非常感谢 我将为您提供一个一般示例,说明运行时类型实例化或类型的一般检查在哪些方面是有用的。想想这个。假设您想要创建一个允许用户创建插件的应用程序。你手头没有用户将来要做的插件。发布应用程序后,您如何使用他们的插件?您需要能够检查应用程序所需方法的插件,然后调用所述方法 为了实现这一点,语言设计人员创建了一个平台,在这个平台上,您可以查询模块(java中的jar、.net中的程序集)中定义的类

我不熟悉Java/scala中反射的用法。我不太清楚为什么我们需要在运行时实例化一个类型。最好举个例子。非常感谢

我将为您提供一个一般示例,说明运行时类型实例化或类型的一般检查在哪些方面是有用的。想想这个。假设您想要创建一个允许用户创建插件的应用程序。你手头没有用户将来要做的插件。发布应用程序后,您如何使用他们的插件?您需要能够检查应用程序所需方法的插件,然后调用所述方法

为了实现这一点,语言设计人员创建了一个平台,在这个平台上,您可以查询模块(java中的jar、.net中的程序集)中定义的类型以及包含的方法、字段等。然后,您可以调用任何方法,实例化您想要的任何类型,并基本上与模块交互,就好像您在编译时拥有该模块并且正在引用它一样(虽然不完全是这样,但您明白了这一点)

下面是在运行时发生的方法调用的示例。您可以假设我们已经从运行时从配置文件获得的字符串创建了
foo
foo
被指定为包含插件类型的jar文件的名称。我不想提供实例化代码,因为这会使其过于臃肿,但方法如下:

Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);
如您所见,我们基本上得到了类foo的类型,我们使用该方法的名称查询该类以获得一个方法,然后调用它。通过这样做,我们在运行时使用插件扩展了程序的功能