我可以在静态代码段中使用 google 反射来查找子 类 吗?
Can I use google reflections in a static section of code to find sub classes?
我正在尝试建立一个系统,允许我子 class 导出到文本文件的 class,而无需修改初始 class。为此,我正在尝试构建一个回调列表,以判断它们是否处理特定条目,然后使用该回调获取从文件创建的 class 的实例。问题是我得到一个错误
java.lang.NoClassDefFoundError:com/google/common/base/Predicate 当我尝试 运行 任何涉及此 class 的事情时。我做错了什么?
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, ...), 并让你的传递依赖没有麻烦。
我正在尝试建立一个系统,允许我子 class 导出到文本文件的 class,而无需修改初始 class。为此,我正在尝试构建一个回调列表,以判断它们是否处理特定条目,然后使用该回调获取从文件创建的 class 的实例。问题是我得到一个错误
java.lang.NoClassDefFoundError:com/google/common/base/Predicate 当我尝试 运行 任何涉及此 class 的事情时。我做错了什么?
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, ...), 并让你的传递依赖没有麻烦。