Hallo,
ich habe hier ein kleines Problem mit Generics und hoffe dabei auf eure Hilfe.
Der leere Konstruktor von ListMap ist nicht erlaubt, da dann in ListMap K==V sein müsste. Ist ListMap aber mit K!=V initialisiert würde ich bei addElement eine ClassKastException bekommen da der Key ja vom Typ V und nicht vom Typ K ist. Wie kann ich garantieren, dass in diesem Fall ListMap mit K==V initialisiert wurde?
ich habe hier ein kleines Problem mit Generics und hoffe dabei auf eure Hilfe.
Java:
public interface IKeyFactory<K,V> {
/**
* Creates a key for the given object.
*/
public K createKey(V object);
}
/**
* Default implementation for IKeyFactory.
*/
public class KeyFactoryDefImpl<V> implements IKeyFactory<V, V> {
/**
* The key for the given object is the object itself.
*/
public V createKey(V object) {
return object;
}
}
import java.util.HashMap;
import java.util.Map;
public class ListMap<K,V> {
private IKeyFactory<K,V> keyFactory;
private Map<K,V> map;
public ListMap(IKeyFactory<K,V> keyFactory) {
this.keyFactory = keyFactory;
this.map = new HashMap<K,V>();
}
public ListMap() {
this(new KeyFactoryDefImpl<V>());
}
public void addElement(V element) {
K key = keyFactory.createKey(element);
map.put(key, element);
}
}
Der leere Konstruktor von ListMap ist nicht erlaubt, da dann in ListMap K==V sein müsste. Ist ListMap aber mit K!=V initialisiert würde ich bei addElement eine ClassKastException bekommen da der Key ja vom Typ V und nicht vom Typ K ist. Wie kann ich garantieren, dass in diesem Fall ListMap mit K==V initialisiert wurde?