2017-02-01 1 views
1

Ich brauche Weg, um herauszufinden, dynamisch Konstruktor erstellen für Filtered Streams Ich habe eine Klasse:Dynamische Verkettung von Stream-

public class Chain1 extends myFilterInputStream 


//constructor 1 
public Chain1 (InputStream is, RepeatableData data) { 
    super(is,data.getData(),data.getKey()); 
} 
//constructor 2 
public Chain1 (InputStream in, RepeatableData[] data) { 
//return new Chain1 (new Chain1 (is, data[1].getData(),data[1].getKey()), data[2].getData(), data[2].getKey()); 

    for (int i=0;i<data.length;i++) { 
    //create the line above dynamically 
    } 

} 
+0

Was meinen Sie mit "Konstruktor dynamisch erstellen"? – Asalle

+0

So kann Konstruktor2 Array von Objekten und Kettenfilter so nehmen, wie Sie es manuell tun können. Zum Beispiel kann ich das tun. new Chain1 (neue Chain1 (is, data [1] .getData(), data [1]. getKey()), data [2] .getData(), data [2] .getKey()); aber ich möchte dies basierend auf der Anzahl der Elemente im Array tun. –

Antwort

0

Ich denke, werden Sie Ihre zweite Konstruktor durch so etwas wie eine Factory-Methode ersetzen müssen, weil Sie die Kette erstellen müssen, bevor Sie sie an den Superkonstruktor übergeben.

public static Chain1 createChain1(InputStream in, RepeatableData[] data){ 
    if(data == null || data.length == 0){ 
     // handle invalid params 
    } 
    InputStream nextStream = in;  
    for (int i = 0; i < data.length; i++) { 
     nextStream = new Chain1(nextStream, data[i]);   
    } 
    return (Chain1)nextStream; 
} 
+0

könnte ich so etwas erstellen? 'code' Klasse _tempClass = (Klasse ) Class.forName (" Chain1 "); Konstruktor ctor = _tempClass.getDeclaredConstructor (String.class); Chain1 ad = ctor.newInstance (in, Daten [i]); // bin mir nicht sicher über den Rest 'code' sorry versuche den Code zu formatieren und es funktioniert nicht. –

+0

@ P.U Was meinst du? Jemand, der eine verkettete 'Chain1' erstellen möchte, muss diese Factory-Methode aufrufen. Die Factory-Methode verwendet Konstruktor 1 zum Erstellen der 'Chain1'-Objekte. – Calculator

+0

JA !! das hat funktioniert. Ich dachte, ich könnte einfach mehrere Instanzen dieser Klasse in ihrem Konstruktor erstellen und diese irgendwie verketten. –