示例:
这将存在于JAR中。
public class Foo {
public void saySomething() {
Log.d("Status","Got it!");
}
}
这将存在于我的主类中。
public class Main {
public void tryToGetSomething() {
Foo.saySomething();
}
}
显然,问题在于如果不包含JAR会抛出错误。我该如何解决这个问题?我如何对此进行保护性编码,以便在包含JAR时执行此操作,但如果未包含JAR则执行其他操作?
此外,对不起,如果代码没有意义,只需几秒钟就写完。你应该明白这个想法。
答案 0 :(得分:1)
如果您尝试使用不存在的类/方法,则会抛出java.lang.NoClassDefFoundError
。在这种情况下,您可以捕获此错误并提供备用行为:
try {
Foo.saySomething();
} catch (NoClassDefFoundError e) {
System.out.println("Load the jar");
}
有趣的是,由于它是一个已检查的异常,您将无法捕获也被抛出的ClassNotFoundException
。可能值得查看this post,了解它们之间的区别,以确保您解决相应的问题。
答案 1 :(得分:1)
以下用于查找Foo
类并调用该方法的反射代码将起作用。未导入jar时会出现异常,您可以正常处理。
try {
Class clazz = Class.forName("Foo");
Method method = clazz.getMethod("saySomething");
Object obj = clazz.newInstance();
method.invoke(obj);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | InvocationTargetException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}