这是我一周前被问到的面试问题,问题是
您必须开发一个音乐播放器,使用户能够创建新主题并使用它。
我说过,有这样一个主题类
课堂主题{
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/