为什么需要在运行时实例化类型



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

我将给您一个一般的例子,说明运行时类型实例化或类型的一般检查在哪里是有用的。想想插件模式。假设您想创建一个允许用户创建插件的应用程序。你手边没有用户将来要制作的插件。在你发布了你的应用程序后,你如何能够使用他们的插件?你需要能够检查他们的插件的方法,你的应用程序需要,然后调用该方法。

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

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

Method method = foo.getClass().getMethod("doSomething", null);
method.invoke(foo, null);

如你所见,我们基本上得到了类foo的类型,我们用方法名查询了一个方法,然后调用它。通过这样做,我们在运行时使用插件扩展了程序的功能。

相关内容

  • 没有找到相关文章

最新更新