Création d'une nouvelle instance à partir de la classe avec le paramètre constructeur
J'ai une situation où ma classe Java doit créer une tonne de certains types d'objets. Je voudrais donner le nom de la classe des objets qui sont créés en tant que paramètre. En plus, j'ai besoin de donner à la classe créée un paramètre de son constructeur. J'ai quelque chose comme
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();
//..
}
}
Avez-vous des idées de comment je pourrais y remédier?
Edit:
Cela fait partie d'un projet de recherche où nous avons besoin d'évaluer les performances de plusieurs compresseurs différents avec plusieurs entrées différentes. Class ccos
est un comprimé OutputStream
soit à partir de la bibliothèque standard de Java, Apache Compresser les Communes ou lzma-java.
Actuellement, j'ai la suite de ce qui semble bien fonctionner. D'autres idées sont les bienvenus.
OutputStream os = new ByteArrayOutputStream();
OutputStream compressedOut = (OutputStream) ccos.getConstructor(OutputStream.class).newInstance(os);
final InputStream sourceIn = new ByteArrayInputStream(array);
source d'informationauteur lhahne
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
Class.getConstructor(paramsTypes...)
méthode et appelnewInstance(..)
sur le constructeur. Dans votre cas:À l'aide de Printemps ClassUtils et BeanUtils de classes, vous pouvez éviter de traiter avec ces fastidieux exceptions qui est du Ressort de la manipulation pour vous :
Vous devez obtenir à la
Constructor
objet (par exemple, viaClass.getConstructors
ouClass.getConstructor
) et ensuite appelerconstructor.newInstance
en lui donnant les arguments qu'il exige.Un exemple que vous pouvez utiliser est comme suit:
permet de dire des conn est une connexion à la base de données.
btarray vous permet de passer des arguments au constructeur.