我有以下代码:
BasePlugin p = Manager.getPlugins(...);
我想获得一个可能无法使用的插件的引用。
例如,假设我这样做:
BasePlugin p = Manager.getPlugins("PluginApple");
但是一段时间后,插件的名称更改为“PluginPear”。这将破坏任何硬编码前一个常量的代码。
我可以这样做:
try {
SomePlugin p = Manager.getPlugins(PluginApple.getName());
}
catch (ClassNotFoundException ex) {
}
哪个有效但是如果Manager.getPlugins()
基于类名而不是字符串执行查找呢?
例如:
BasePlugin p = Manager.getPlugins(PluginApple.class);
if (p != null)
((PluginApple)p).doSomething())
所以这就是问题:我可以构建一个知道PluginApple
的jar,只要它可以在类路径中引用。但现在可以说PluginApple
在运行时不可用。 PluginApple.class
的值是作为常量提供的,其值是在构建字节代码时确定的吗?或者如果该类不可用,我会得到某种运行时异常吗?
答案 0 :(得分:0)
但现在让我们说PluginApple在运行时不可用。 PluginApple.class的值是作为常量提供的,其值是在构建字节代码时确定的吗?
没有。它是表示类型为java.lang.Class
的对象的类文字。评估方法调用需要创建该对象,而这又需要加载指定的类。
如果班级不可用,我会得到某种运行时异常吗?
您将获得NoClassDefFoundError
。 (很好。获得Error
的方式要少得多Exception