martedì 24 settembre 2013

Q13

Given the Greetings.properties file, containing:

HELLO_MSG = Hello, everyone!
GOODBYE_MSG = Goodbye everyone!

 
And given:

public class ResourceApp {
       public void loadResourceBundle() {
             ResourceBundle resource = ResourceBundle.getBundle("Greetings",Locale.US);
             System.out.println(resource.getObject(1));
       }
       public static void main(String[] args) {
             new ResourcesApp().loadResourceBundle();
       }
}


What is the result?


A.
Compilation fails

B.
HELLO_MSG

C.
GOODGYE_NSG

D.
Hello, everyone!

E.
Goodbye everyone!

La risposta è A.
Infatti per come è scritto quel codice non compila per due motivi :
1)      Il metodo getObject() di ResourceBundle accetta solo String.
2)      Nel new ResourcesApp() c’è un errore infatti il tipo ResourcesApp non è definito.
Se invece si considera questo altro codice, in cui ResourcesApp si sostituisce con ResourceApp (senza la s) e l’argomento al metodo getObject si cambia da 1 ad “1” si ha una corretta compilazione:
import java.util.Locale;
import java.util.ResourceBundle;

 
public class ResourceApp {
       public void loadResourceBundle() {
             ResourceBundle resource = ResourceBundle.getBundle("Greetings",Locale.US);
             System.out.println(resource.getObject("1"));
       }

       public static void main(String[] args) {
             new ResourcesApps().loadResourceBundle();
       }
}
Per testare questo codice va creato un file di proprietà Greetings :
 
con il seguente codice :
HELLO_MSG = Hello, everyone!
GOODBYE_MSG = Goodbye everyone!

 
In questo caso il codice restituisce una eccezione a Runtime perché nel file di properties non esiste una risorsa con chiave “1”:

Exception in thread "main" java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key 1

Il codice viene eseguito correttamente invece nel caso di richiamo di una chiave esistente , ad esempio  HELLO_MSG :

import java.util.Locale;
import java.util.ResourceBundle;

public class ResourceApp {
       public void loadResourceBundle() {
             ResourceBundle resource = ResourceBundle.getBundle("Greetings",Locale.US);
             System.out.println(resource.getObject("HELLO_MSG"));
       }
       public static void main(String[] args) {
             new ResourceApp().loadResourceBundle();
       }
}

in questo caso l’uscita è : Hello, everyone!.

Riferimenti:

Nessun commento:

Posta un commento