Javaクラスがある種のオブジェクトを作成する必要がある状況があります。私はパラメータとして作成されたオブジェクトのクラスの名前を与えたいと思います。さらに、作成したクラスにそのコンストラクタのパラメータを渡す必要があります。私は何かを持っていますコンストラクタパラメータを持つクラスから新しいインスタンスを作成する
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();
// ..
}
}
私はこれをどのように修正することができますアイデアはありますか?
編集:
これは、我々は、複数の異なる入力で複数の異なるコンプレッサーの性能を評価するために必要な研究プロジェクトの一部です。 Class ccos
は、Javaの標準ライブラリであるApache Compress Commonsまたはlzma-javaから圧縮されたOutputStream
です。
現在、私は正常に動作するように見える以下のものがあります。他のアイデアを歓迎します。
OutputStream os = new ByteArrayOutputStream();
OutputStream compressedOut = (OutputStream) ccos.getConstructor(OutputStream.class).newInstance(os);
final InputStream sourceIn = new ByteArrayInputStream(array);
を?ここではどのようなクラスが使用されますか? –
リフレクトでハックするのではなく、抽象的なファクトリを使用することを検討しましたか? –
いくつかの詳細情報を追加編集しました – lhahne