【发布时间】:2011-11-18 00:22:17
【问题描述】:
我在 Java 中有这个类(它来自 JaCoCo 项目):
public class MemoryMultiReportOutput implements IMultiReportOutput {
private final Map<String, ByteArrayOutputStream> files = new HashMap<String, ByteArrayOutputStream>();
private final Set<String> open = new HashSet<String>();
private boolean closed = false;
public OutputStream createFile(final String path) throws IOException {
assertFalse("Duplicate output " + path, files.containsKey(path));
open.add(path);
final ByteArrayOutputStream out = new ByteArrayOutputStream() {
@Override
public void close() throws IOException {
open.remove(path);
super.close();
}
};
files.put(path, out);
return out;
}
public void close() throws IOException {
closed = true;
}
public void assertEmpty() {
assertEquals(Collections.emptySet(), files.keySet());
}
public void assertFile(String path) {
assertNotNull(String.format("Missing file %s. Actual files are %s.",
path, files.keySet()), files.get(path));
}
public void assertSingleFile(String path) {
assertEquals(Collections.singleton(path), files.keySet());
}
public byte[] getFile(String path) {
assertFile(path);
return files.get(path).toByteArray();
}
public InputStream getFileAsStream(String path) {
return new ByteArrayInputStream(getFile(path));
}
public void assertAllClosed() {
assertEquals(Collections.emptySet(), open);
assertTrue(closed);
}
}
当我编译这个类时,Eclipse 会创建 MemoryMultiReportOutput.class 和 MemoryMultiReportOutput$1.class。
第一个问题:Eclipse 为什么要创建MemoryMultiReportOutput$1.class? Eclipse 认为 ByteArrayOutputStream out 是 InnerClass?
但我的问题是,当我加载 MemoryMultiReportOutput.class 时,如何加载父类中存在的所有内部类?
【问题讨论】:
-
你为什么担心加载内部类?你在写一个类加载器吗?
-
我有一个调用此类的 JUnit 测试,如果我没有加载 MemoryMultiReportOutput.class 和 MemoryMultiReportOutput$1.class,则 JUnitCore.run(...) 的结果是 ClassNotFound...是的,我有这个ClassLoader...
标签: java eclipse inner-classes