Erste Schritte ResourceBundle getStringArray Methode

ProChris

Mitglied
Hallo,

ich bin gerade ein bisschen am verzweifeln. Ich würde gerne einen Key in meinem Resource Bundle ablegen und mehrere Werte dazu speichern. Im wesentlichen sowas hier:

Code:
application.values=value 1,value 2,value 3

Die Klasse ResourceBundle stellt mir sogar eine Methode bereit, um ein Array abzufragen:

Java:
final ResourceBundle bundle = ResourceBundle.getBundle("app");
final String[] stringArray = bundle.getStringArray("application.values");

Code:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String;
    at java.util.ResourceBundle.getStringArray(ResourceBundle.java:424)

Hat jemand eine Idee, was ich falsch mache?

Viele Grüße

ProChris
 
Scheinbar wird der Wert von application.values als String interpretiert. getStringArray versucht diesen String dann zu einem String[] zu casten - dort kracht es dann.
 
Hallo Robat,

deine Antwort ist absolut korrekt. Nur, was kann ich dagegen tun?

Eine Idee von mir, war ein falsches Trennzeichen im ResourceBundle. Das schließe ich jetzt allerdings aus.

Viele Grüße

ProChris
 
Lad es doch als String und splitte es an einem Delimiter.
Java:
String[] arr = rb.getString("application.values").split(",");
System.out.println(Arrays.toString(arr));
 
Genau das wollte ich verhindern. Wenn es bereits eine Methode dafür gibt, wollte ich diese auch verwenden. Dann brauche ich das Rad nicht erneut erfinden. 🙂
 
Afaik funktioniert das Laden mit getStringArray mit dem "normalen" ResourceBundle nicht, das muss man sich in dem Fall selbst basteln.

Andere Möglichkeit wäre das nutzen einer Library, dürfte für diesen Fall aber zu viel sein.
 
Wenn es bereits eine Methode dafür gibt, wollte ich diese auch verwenden.
Die gibt es aber nicht. Das PropertyResourceBundle verwendet Properties und als "Property" wird dort ein Key-Value-Paar verstanden, bei dem sowohl Key als auch Value ein String ist (String getProperty(String key)). Der dokumentierte Cast nach String[] bei getStringArray muss also fehlschlagen.
 
Dann handelt es sich hier doch um einen Bug im Java. Ich frage mich nur, warum das noch nicht behoben wurde.
Nein, das funktioniert alles nach Spezifikation (die mag in dem Fall ungünstig sein, das ist aber was anderes).

Du kannst aber deine eigene ResourceBundle-Klasse schreiben, die diese Funktion sinnvoll umsetzt.
 
Dann handelt es sich hier doch um einen Bug im Java.
Nein, das hatte ich eigentlich versucht, zu erklären.

Das PropertyResourceBundle kann wie ResourceBundle schon mit Arrays umgehen (du kannst in das ResourceBundle ein String-Array legen und mit getStringArray wieder holen). In einer .properties-Datei können aber nur Strings verwaltet werden.
 
Das PropertyResourceBundle kann wie ResourceBundle schon mit Arrays umgehen (du kannst in das ResourceBundle ein String-Array legen und mit getStringArray wieder holen). In einer .properties-Datei können aber nur Strings verwaltet werden.
Bevor's Missverständnisse gibt:

PropertyResourceBundle kann nur Strings zurück geben, da es immer eine Properties-Datei lädt.
ResourceBundle an sich kann aber auch anderes, wenn es passend erweitert wird.
 

Neue Themen


Zurück
Oben