这是我一周前被问到的面试问题,问题是


您必须开发一个音乐播放器,使用户能够创建新主题并使用它。


我说过,有这样一个主题类


课堂主题{
par1;
par2;
par3;

吸气剂

}


当用户告诉我们的播放器创建一个新主题时,我们将要求这些参数,并通过使用setter,我们可以拥有一个主题对象,该对象的参数可以用于渲染。

但是他告诉我这是一个Java反射问题,他说您应该使用反射来获取类名等。

有人知道如何在这里使用反射吗?还是曾经有人问过他们类似的问题?他们是否使用反射来解决?

我认为这可能与Factory设计模式有关,但我找不到所提出的问题与设计模式之间的相似之处?

最佳答案

这可能意味着类加载-动态加载主题(其中还包括类加载)-您可以通过调用Class.forName("org.package.YourTheme")获得所需的类,然后使用反射创建新实例。而且此实例或插件可以自定义您的应用。

编辑:

这就是通常在Java应用程序中完成插件的方式。开发人员创建一个包含其实现的JAR。在简单的情况下,他扩展了应用程序中的界面:

    interface Theme{
        void initialize();
        void handleEvent(AppEvent e);
    }

    class MyTheme implements Theme{
        public void initialize(){
            // init logic
        }

        public void handleEvent(AppEvent e){
            // handles the event
        }
    }


开发人员将这两个类打包到my-theme-0.1.jar中。

用户将其下载到网络上,然后将其复制到他的应用程序的主题文件夹中。

当应用启动时(或者也可以在运行时完成),它会扫描主题文件夹并使用URLClassLoader加载所有插件。

然后加载主题:

    final Class<?> settingsClass = classLoader.loadClass("MyTheme");
    Theme theme = (Theme) settingsClass.newInstance();

    theme.initialize();

关于java - 如何在运行时使用反射创建新的音乐播放器屏幕?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18960068/

10-14 12:37
查看更多