Hi Leute,
ich hab gerade mal ein kleines nicht altägliches Generic-Problem. Vielleicht hat ja jemand eine Idee. Ich möchte eine Funktion in einer Generic-Klasse nur Objekten zur Verfügung stellen, die eine bestimmte Eigenschaft haben. Hier soll die addInt-Funktion nur aufrufbar sein, wenn der Parametertyp T von List<Integer> erbt.
Die Funktion addInt macht dies, allerdings nicht typensicher. In der main würde es dann zu einem Laufzeitfehler führen. Bei den anderen beiden Varianten hab ichs mit nem neuen Typparameter versucht. Beide lassen sich aber leider nicht compilieren.
Das hier ist übrigens nur ein Beispiel. Mein konkreter Fall sieht etwas anders aus. Es ist jetzt auch nicht mega wichtig, da die erste Variante ja funktioniert. Ich fände es nur interessant, ob es dafür ne Lösung gibt.
lg Kevin
ich hab gerade mal ein kleines nicht altägliches Generic-Problem. Vielleicht hat ja jemand eine Idee. Ich möchte eine Funktion in einer Generic-Klasse nur Objekten zur Verfügung stellen, die eine bestimmte Eigenschaft haben. Hier soll die addInt-Funktion nur aufrufbar sein, wenn der Parametertyp T von List<Integer> erbt.
Java:
import java.util.*;
public class TestGeneric<T> {
private Map<String, T> map;
public void addInt(String name, Integer value) {
T arr = map.get(name);
if (arr == null) {
ArrayList<Integer> arr2 = new ArrayList<>();
arr2.add(value);
map.put(name, (T) arr2);
}
else {
((ArrayList<Integer>) z).add(value);
}
}
public <F extends T & List<Integer>> void addInt2(String name, Integer value) {
F arr = map.get(name);
if (arr == null) {
arr = new ArrayList<>();
arr.add(value);
map.put(name, arr);
}
else {
z.add(value);
}
}
public <F extends List<Integer> & T> void addInt3(String name, Integer value) {
F arr = map.get(name);
if (arr == null) {
arr = new ArrayList<>();
arr.add(value);
map.put(name, arr);
}
else {
z.add(value);
}
}
public static void main() {
new TestGeneric<List<Integer>>().addInt("h", 2);
new TestGeneric<Object>().addInt("h", 2); // soll Compiler-Error erzeugen
}
}
Das hier ist übrigens nur ein Beispiel. Mein konkreter Fall sieht etwas anders aus. Es ist jetzt auch nicht mega wichtig, da die erste Variante ja funktioniert. Ich fände es nur interessant, ob es dafür ne Lösung gibt.
lg Kevin
Zuletzt bearbeitet: