Tengo una situación donde mi clase Java necesita crear una tonelada de cierto tipo de objetos. Me gustaría dar el nombre de la clase de los objetos que se crean como un parámetro. Además, necesito darle a la clase creada un parámetro en su constructor. Tengo algo así comoCreando una nueva instancia desde Clase con el parámetro constructor
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();
// ..
}
}
¿Tiene alguna idea de cómo podría remediar esto?
Editar:
Esto es parte de un proyecto de investigación en el que necesitamos para evaluar el desempeño de múltiples compresores diferentes, con varias entradas diferentes. Class ccos
es un archivo comprimido OutputStream
de la biblioteca estándar de Java, Apache Compress Commons o lzma-java.
Actualmente tengo lo siguiente que parece funcionar bien. Otras ideas son bienvenidas.
OutputStream os = new ByteArrayOutputStream();
OutputStream compressedOut = (OutputStream) ccos.getConstructor(OutputStream.class).newInstance(os);
final InputStream sourceIn = new ByteArrayInputStream(array);
¿Por qué necesita para decir 'Compressor' qué tipo de objetos para crear? ¿Qué clases de clases se usarán aquí? –
¿Ha considerado utilizar una fábrica abstracta para esto en lugar de piratearlo con reflejos? –
editado para agregar más información – lhahne