J'ai cette classe en Java (il est du projet JaCoCo):charge intérieure de classe Java
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);
}
}
Quand je compile cette classe Eclipse et créer MemoryMultiReportOutput.class
MemoryMultiReportOutput$1.class
.
Première question: Pourquoi Eclipse crée le MemoryMultiReportOutput$1.class
? Eclipse considère le ByteArrayOutputStream out
une InnerClass?
Mais mon problème est, quand je charge le MemoryMultiReportOutput.class
comment puis-je charger toutes les innerclasses présentes dans la classe parente?
Dans quel but vous inquiétez-vous de charger la classe interne? Etes-vous en train d'écrire un chargeur de classe? – Yishai
J'ai un test JUnit qui invoque cette classe et si je n'ai pas chargé MemoryMultiReportOutput.class et MemoryMultiReportOutput $ 1.class, le résultat de JUnitCore.run (...) est ClassNotFound ... Oui, j'ai ceci [ ClassLoader] (http://pastebin.com/TjmLr702) ... – josecampos