lange variable Parameterliste im String-Format



  • @ Tolpan

    Ich weiß, mir ist aber noch nicht klar, wie ich das Problem lösen kann.

    @ DEvent

    out.printf sieht so aus, als könnte es mein Problem lösen. Es gibt aber ein PrintStream-Objekt zurück und keinen String.

    Ein weiteres Problem ist, dass optionList zu Beginn der Methode definiert werden muss, die einzelnen Variablenwerte aber erst zu einem späteren Zeitpunkt feststehen.



  • Schaut dir mal String.format(...) an.



  • Okay, String.format() gibt einen String zurück; das löst immerhin schon mal das erste Problem.

    Das zweite Problem bleibt aber bestehen:

    Zu Beginn der Methode will ich optionList definieren, aber mehrere Variablen wie z.B. boxWidth und boxHeight werden erst später definiert:

    *METHODENANFANG

    ...

    optionList = [String inkl. boxWidth, boxHeight etc.]

    ...

    Definition von boxWidth, boxHeight etc.

    ...

    fit_textline(bla, bla, bla, optionList);

    ...

    fit_textline(bla, bla, bla, optionList);

    ...

    fit_textline(bla, bla, bla, optionList);

    ...

    METHODENENDE*

    Die einzige Lösung die mir da einfällt ist eine eigene Methode zu schreiben, die den langen fit_textline-Aufruf kapselt und an dessen Stelle aufgerufen wird:

    private void fit_banderole()
    {
    p.fit_textline(text,
                                   0.0,
                                   0.0,
                                   "boxsize   = {" + boxWidth + " " + boxHeight + "} " +
                                   "embedding = true " +
                                   "encoding  = unicode " +
                                   "fillcolor = {cmyk " + textColor.cyan + " " + textColor.magenta + " " + textColor.yellow + " " + textColor.key + "} " +
                                   "fitmethod = meet " +
                                   "fontname  = input/fonts/" + fontName + " " +
                                   "fontsize  = " + banderoleWidth + " " +
                                   "margin    = " + banderoleWidth / 5 + " " +
                                   "position  = {center center}"); 
    }
    


  • Nein, halt. Das funktioniert auch nicht so, da ich der Methode fit_banderole()
    erst die Werte von boxWidth, boxHeight etc. als Argumete übergeben müsste.

    Und das würde die Sache so kompliziert machen, dass es keine Vereinfachung im Vergleich zu meinem jetzigen Vorgehen ist...



  • Was willst du denn genau damit ereichen? vielleicht gibts ja ne andere Möglichkeit die deinen Riesenstring überflüssig macht.



  • Ich will lediglich erreichen, dass ich nicht 8x innerhalb von ein und derselben Methode immer den genau gleichen und sehr langen Methodenaufruf stehen habe.



  • Warum speicherst du dann den einmal zusammengebastelten String nicht einfach und verwendest ihn dann immer wieder?

    Oder ändern sich die Variablenwerte zwischen den Aufrufen immer wieder? Dann wirst du nicht drumherumkommen, den String immer wieder neu zusammenzubauen. Du könntest das höchstens in eine eigene Klasse packen, um Coderedundanzen abzubauen.



  • Ja, die Variablenwerte ändern sich zwischen den Aufrufen.



  • Dann würde ich das, wie gesagt, mit einer eigenen Builder-Klasse lösen:

    class OptionsBuilder {
        private int boxWidth;
        private int boxHeight;
        // + andere Parameter...
    
        public void setBoxWidth(int boxWidth) {
            this.boxWidth = boxWidth;
        }
        // + andere Setter...
    
        public String build() {
            return  "boxsize   = {" + boxWidth + " " + boxHeight + "} " + ...
    
        }
    }
    

    Aufruf:

    ...
    OptionsBuilder opts = new OptionsBuilder();
    p.fit_textline(text, 0.0, 0.0, opts.build()); 
    opts.setBoxWidth(500);
    p.fit_textline(text, 0.0, 0.0, opts.build()); 
    ...
    


  • Tolle Lösung, dankeschön!


Anmelden zum Antworten