java - 我可以在代码的静态部分使用谷歌反射来查找子类吗?

标签 java reflections

我正在尝试建立一个系统,该系统允许我对导出到文本文件的类进行子类化,而无需修改初始类。为此,我尝试构建一个回调列表,可以判断它们是否处理特定条目,然后使用该回调获取从文件创建的该类的实例。问题是我收到错误

java.lang.NoClassDefFoundError: com/google/common/base/Predicate 当我尝试运行涉及此类的任何内容时。我做错了什么?

public abstract class Visibility {

private static final List<VisibilityCreationCallback> creationCallbacks;
static {
    creationCallbacks = new ArrayList<VisibilityCreationCallback>();

    Reflections reflections = new Reflections(new ConfigurationBuilder()
            .setUrls(ClasspathHelper.forPackage("com.protocase.viewer.utils.visibility"))
            .setScanners(new ResourcesScanner()));
// ... cut ...

public static Visibility importFromFile(Map<String, Object> importMap) {
   for (VisibilityCreationCallback callback: creationCallbacks) {
       if (callback.handles(importMap)) {
           return callback.create(importMap);
       }
   }

   return null;

}

public class CategoryVisibility extends Visibility{

public static VisibilityCreationCallback makeVisibilityCreationCallback () {
    return new VisibilityCreationCallback() {

        @Override
        public boolean handles(Map<String, Object> importMap) {
           return importMap.containsKey(classTag);
        }

        @Override
        public CategoryVisibility create(Map<String, Object> importMap) {
            return importPD(importMap);
        }
    };
}
<小时/>
/**
 * Test of matches method, of class CategoryVisibility.
 */
@Test
public void testMatches1() {
    Visibility other = new UnrestrictedVisibility();
    CategoryVisibility instance = new CategoryVisibility("A Cat");
    boolean expResult = true;
    boolean result = instance.matches(other);
    assertEquals(expResult, result);
}

最佳答案

您只是在类路径中缺少 Guava 库,而 Reflections 需要它。这是简短的答案。

更好的解决方案是使用适当的构建工具(maven、 gradle,...),并轻松拥有传递依赖项。

关于java - 我可以在代码的静态部分使用谷歌反射来查找子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27995259/

相关文章:

java - 自定义 java gradle 插件中的反射

java - java反射中的ConfigurationBuilder、FilterBuilder、Scanners

java - Gradle - 如何为 Maven 依赖项指定 javadoc 位置 jar 文件?

java - javafx之间的socket通信

java - 如果 edittext 留空,则强制 "0"

java - 用于查找包中所有类的反射库

java - AWS Lambda 和 Java 反射 (Guava)

java - 获取JAVA中动态加载的类的.class文件的路径

Java 类将大于视为大于或等于

java - 改变java类排序标准的好方法