Ich habe Situation, wo meine Java-Klasse eine Tonne bestimmter Art von Objekten erstellen muss. Ich möchte den Namen der Klasse der Objekte angeben, die als Parameter erstellt werden. Außerdem muss ich der erstellten Klasse einen Parameter in ihrem Konstruktor geben. Ich habe so etwas wieErstellen einer neuen Instanz aus Klasse mit Konstruktorparameter
class Compressor {
Class ccos;
public Compressor(Class ccos) {
this.ccos = ccos;
}
public int getCompressedSize(byte[] array) {
OutputStream os = new ByteArrayOutputStream();
// the following doesn't work because ccos would need os as its constructor's parameter
OutputStream cos = (OutputStream) ccos.newInstance();
// ..
}
}
Haben Sie irgendwelche Ideen, wie ich das beheben könnte?
Edit:
Dies ist Teil eines Forschungsprojektes ist es, wo wir die Leistung mehrerer verschiedenen Verdichter mit mehreren verschiedenen Eingängen bewerten müssen. Class ccos
ist eine komprimierte OutputStream
entweder von Java-Standard-Bibliothek, Apache Compress Commons oder lzma-Java.
Derzeit habe ich folgendes, das scheint gut zu funktionieren. Andere Ideen sind willkommen.
OutputStream os = new ByteArrayOutputStream();
OutputStream compressedOut = (OutputStream) ccos.getConstructor(OutputStream.class).newInstance(os);
final InputStream sourceIn = new ByteArrayInputStream(array);
Warum brauchen Sie zu sagen 'Compressor' welche Art von Objekten zu schaffen? Welche Arten von Klassen werden hier verwendet? –
Haben Sie darüber nachgedacht, eine abstrakte Fabrik zu verwenden, anstatt sie mit Reflexionen zu hacken? –
bearbeitet, um weitere Informationen hinzuzufügen – lhahne