lunedì 16 settembre 2013

Q7

Which two are valid initialization statements?

 A.
Map<String, String> m = newSortedMap<String, String>();

B.
Collection m = new TreeMap<Object, Object>();

C.
HashMap<Object, Object> m = newSortedMap<Object, Object>();

D.
SortedMap<Object, Object> m = new TreeMap<Object, Object> ();

E.
Hashtablem= new HashMap();

F.
Map<List, ArrayList> m = new Hashtable<List, ArrayList>();

Risposta D e F

A.
SortedMap è un'interfaccia che estende proprio l'interfaccia Map. Infatti :
public interface SortedMap<K, V> extends Map<K, V>
Quindi questo codice non ha senso perchè si sta cercando di instanziare un' interfaccia.


B.
TreeMap viene da Map infatti :
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V> à
public abstract class AbstractMap<K,V> extends Object implements Map

Non possiamo instanziare un oggetto TreeMap e assegnare il reference ad una variabile di tipo Collection.
Dobbiamo fare un cast per arrivare almeno a compilare:
Collection m = (Collection) new TreeMap<Object, Object>();

Invece avrebbe avuto senso partire dall'interfaccia Map, infatti questo codice compila:
Map m = new TreeMap<Object, Object>();

C.
public interface SortedMap<K, V> extends Map
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,

SortedMap è una interfaccia e noi stiamo cercando di instanziarla. Questo non è possibile.

D.
Questo è corretto perchè stiamo instanziando un oggetto di tipo TreeMap (public class TreeMap<K,V> extends AbstractMap<K,V>) assegnando il reference ad una variabile di tipo SortedMap (public interface SortedMap<K, V> extends Map).


E.
Questo codice non ha senso perchè Hashtablem non può essere risolto in una variabile non essendo mai stato creato.


F.
Questo è corretto perchè stiamo instanziando un oggetto di tipo Hashtable (public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>,) assegnando il reference ad una variabile di tipo Map (public interface Map<K,V>).

Riferimenti :
http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html

Nessun commento:

Posta un commento