java是一个类。类被视为没有运行时耦合的常量?
其中我有以下代码:
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
的值是否作为常量提供,其值是在生成字节码时确定的?或者如果类不可用,我会得到某种运行时异常吗
# 1 楼答案
不是。它是一个类文本,表示
java.lang.Class
类型的对象。评估方法调用需要创建该对象,这反过来需要加载指定的类你会得到一个
NoClassDefFoundError
。(很好。获得Error
的方法比获得Exception
的方法少得多)