2017-05-23 1 views
1

Im Moment benutze ich einen Ausschnitt wie folgt aus:Java Array wechselndem Inhalt

private void updateWidth() { 
    rowWidth=new int[]{ 
      font.getWidth(MainClass.getMain().lang().getString("start"), 120)+20, 
      font.getWidth(MainClass.getMain().lang().getString("name")+": "+name+"I", 120)+20, 
      font.getWidth(MainClass.getMain().lang().getString("currentHigh"), 120)+20, 
      font.getWidth(MainClass.getMain().lang().getString("back"), 120)+20 
    }; 

} 

Aber persönlich ich wirklich nicht, Reihe nr mag 2. Wo ich immer, wenn ich die Werte aktualisieren, ein neues Objekt erstellen . Ist das wirklich okay oder fehlt mir eine offensichtliche Lösung?

+0

Wenn 'rowWidth' immer die Länge' 4' hat, können Sie einfach die Einträge überschreiben: 'rowWidth [0] = ...; rowWith [1] = ...; rowWith [2] = ...; rowWith [3] = ...; ' – Turing85

Antwort

0

Das Erstellen eines temporären Objekts, das den Schlüssel darstellt, ist in Ordnung, vorausgesetzt, dass derselbe Schlüssel nicht statisch erstellt werden kann (z. B. weil name von Konfigurationsinformationen irgendeiner Art stammt).

Sie können die Erklärung ein wenig durch eine Hilfsmethode zu schaffen reduzieren einige dieser Logik zu kapseln:

private static int getWidth(String key) { 
    return font.getWidth(MainClass.getMain().lang().getString(key), 120)+20; 
} 

Jetzt können Sie Ihre Array wie folgt initialisiert werden:

rowWidth=new int[]{ 
    getWidth("start") 
, getWidth("name" + ": " + name + "I") 
, getWidth("currentHigh") 
, getWidth("back") 
}; 
0

Code a hat Vielfach vervielfältigter Code, der gegen DRP Principle verstößt, der in java-8 wie folgt umgestaltet werden kann:

int[] rowWidth = Stream.of("start","name" + ": " + name + "I","currentHigh","back") 
         .mapToInt(key - > font.getWidth(MainClass.getMain().lang() 
                 .getString(key) ,120) + 20) 
         .toArray(); 
+0

holi sh * t: D das sieht ziemlich cool aus, um ehrlich zu sein. – Ranndom