Restriktive Map-Deklarierung

Status
Nicht offen für weitere Antworten.
D

Deprecated

Gast
Hi,

ich benötige in einer Applikation eine Map, die zu einem beliebigen Class-Objekt (als Schlüssel) jeweils eine Instanz genau dieser Klasse als Wert speichert.

Mögliche Paare sollten also zB sein:
String.class - "Blabla"
Integer.class - new Integer(5)

Was nicht gehen sollte wäre zB:
Integer.class - "Blabla"
Klar, denn "Blabla" ist nicht vom Typ Integer.

So etwas zur Laufzeit während des Einfügens in die Map zu überprüfen wäre ja kein Ding.
Ich hätte allerdings gerne eine Map, die so etwas schon zur Compilezeit gar nicht erst erlaubt. Also eine Map, die (vermutlich mittels Generik) so definiert ist, dass der Compiler einen Fehler meldet, wenn solche falschen Paare eingefügt werden.

Also so etwas wie
Code:
<T> Map<Class<T>,T> map;
, was aber leider nicht funzt.

Da ich schon vieles probiert habe, bin ich schon zufrieden, wenn mir jemand sagt, dass so etwas zur Compile-Time auf keinen Fall möglich ist. Aber vielleicht geht's ja doch irgendwie...
 
S

SlaterB

Gast
Generics in der Form dürfte das wohl nicht können,

Code:
public class Test {

	public static void main(String[] args) throws Exception {

		MyMap map = new MyMap();
		map.myPut(Integer.class, new Integer(4));
		// map.myPut(Integer.class, ""); // Compilerfehler
	}

}

class MyMap extends HashMap {

	public <T> void myPut(Class<T> cl, T t) {
		super.put(cl, t);
	}

	@Override
	public Object put(Object key, Object value) {
		throw new RuntimeException("denkste");
	}

	@Override
	public void putAll(Map m) {
		throw new RuntimeException("denkste");
	}

}
 

Marco13

Top Contributor
???:L Das hier
Code:
        Map<Class<String>,String> map = null;
        map.put(String.class, "Test");
        map.put(Integer.class, "Test"); //-------- Knirsch!
liefert doch AUCH schon einen Compilerfehler!?


???:L
 
S

SlaterB

Gast
es sollen alle Paare von Klassen + Objekt erlaubt sein,
bei
map.put(Integer.class, 5);
gäbs hier ein falsches Knirsch
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben