Java 泛型和函数
Java Generics and Functions
我有一个功能
public static void printTreeMap (TreeMap <Object, ArrayList> map, PrintStream ps)
和一个 TreeMap:
TreeMap <Integer, ArrayList<MyClass>> tm = new TreeMap<>();
当我尝试像这样调用 printTreeMap
时:printTreeMap(tm, System.out);
,出现异常
The method printTreeMap(TreeMap<Object,ArrayList>, PrintStream)
in the type task_v7 is not applicable for the arguments (TreeMap<Integer,ArrayList<MyClass>>, PrintStream)
Java(67108979)
我该如何解决?
我建议采用这种方法。请注意,对于这种类型的一般方法,没有这些类型的先验知识。因此,这完全依赖于覆盖 toString()
.
所涉及的类型
public static <T,U> void printTreeMap(TreeMap<T, ArrayList<U>> tm, PrintStream st) {
tm.forEach((k,v)-> {
st.println(k);
for (U e : v) {
st.println(" " + e);
}
});
}
请注意,T 和 U 不必不同,因为它们可以是同一类型。
这是一个例子。
TreeMap<Integer, ArrayList<MyClass>> tm = new TreeMap<>();
tm.put(10, new ArrayList<>(
List.of(new MyClass("Alpha"), new MyClass("Beta"))));
tm.put(30, new ArrayList<>(
List.of(new MyClass("Gamma"), new MyClass("Delta"))));
printTreeMap(tm, System.out);
版画
10
Alpha
Beta
30
Gamma
Delta
class
class MyClass {
String a;
public MyClass(String a) {
this.a = a;
}
public String toString() {
return a;
}
}
适用于任何列表地图的更通用的方法如下:
public static <L extends List<?>, M extends Map<?,L>> void printMapOfLists(M tm,
PrintStream st) {
tm.forEach((k, v) -> {
st.println(k);
for (Object e : v) {
st.println(" " + e);
}
});
}
我有一个功能
public static void printTreeMap (TreeMap <Object, ArrayList> map, PrintStream ps)
和一个 TreeMap:
TreeMap <Integer, ArrayList<MyClass>> tm = new TreeMap<>();
当我尝试像这样调用 printTreeMap
时:printTreeMap(tm, System.out);
,出现异常
The method
printTreeMap(TreeMap<Object,ArrayList>, PrintStream)
in the type task_v7 is not applicable for the arguments(TreeMap<Integer,ArrayList<MyClass>>, PrintStream)
Java(67108979)
我该如何解决?
我建议采用这种方法。请注意,对于这种类型的一般方法,没有这些类型的先验知识。因此,这完全依赖于覆盖 toString()
.
public static <T,U> void printTreeMap(TreeMap<T, ArrayList<U>> tm, PrintStream st) {
tm.forEach((k,v)-> {
st.println(k);
for (U e : v) {
st.println(" " + e);
}
});
}
请注意,T 和 U 不必不同,因为它们可以是同一类型。
这是一个例子。
TreeMap<Integer, ArrayList<MyClass>> tm = new TreeMap<>();
tm.put(10, new ArrayList<>(
List.of(new MyClass("Alpha"), new MyClass("Beta"))));
tm.put(30, new ArrayList<>(
List.of(new MyClass("Gamma"), new MyClass("Delta"))));
printTreeMap(tm, System.out);
版画
10
Alpha
Beta
30
Gamma
Delta
class
class MyClass {
String a;
public MyClass(String a) {
this.a = a;
}
public String toString() {
return a;
}
}
适用于任何列表地图的更通用的方法如下:
public static <L extends List<?>, M extends Map<?,L>> void printMapOfLists(M tm,
PrintStream st) {
tm.forEach((k, v) -> {
st.println(k);
for (Object e : v) {
st.println(" " + e);
}
});
}