【发布时间】:2019-11-26 11:27:49
【问题描述】:
我正在尝试在我的 Java 项目中使用反射(也使用 Spring boot),并且我必须获取实现接口的包的所有类。
public static Object[] getClasses(String packageName) throws IOException
{
Reflections r = new Reflections(packageName);
Set<Class<? extends EntityXML>> allClasses = r.getSubTypesOf(EntityXML.class);
return (Object[]) allClasses.toArray();
}
但它总是返回这个错误。
java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
at org.reflections.Reflections.expandSuperTypes(Reflections.java:380)
at org.reflections.Reflections.<init>(Reflections.java:126)
at org.reflections.Reflections.<init>(Reflections.java:168)
at org.reflections.Reflections.<init>(Reflections.java:141)
at gcs.fds.focus.lib.utils.FindPackages.getClasses(FindPackages.java:14)
...
我尝试导入 google.guava 包以避免此错误,它修复了它,但我不想导入它,因为它是一个在我的项目中没有使用的包。
知道如何避免这个错误吗?
【问题讨论】:
-
"这是一个在我的项目中没有使用的包。"错误消息不同意。 您的代码可能不会使用它,但它肯定会在项目中使用。
-
这不是关于导入,而是关于 google jars 是否在您的构建路径中,以及运行方法时的类路径中。导入只是为代码中的类型名称提供快捷方式。
标签: java spring-boot guava reflections