使用泛型,我想使我的方法参数化以接受键(A或B)和值的映射作为Model,然后将其转换为Map<UUID, Model>
的映射
问题是我在entry.getKey().getId()
b / c上遇到错误。我还没有定义什么?关键。有人可以帮忙吗?
public void method(Map<?, Model> map) {
Map<UUID, Model> transformation =
map.entrySet().stream()
.collect(
Collectors.toMap(entry -> entry.getKey().getId(), entry -> entry.getValue()));
}
class S {
protected UUID getId() {
// return UUID
}
}
class A extends S {}
class B extends S {}
class Model {
// bla bla
}
答案 0 :(得分:1)
如果A
和B
实现了提供getId()
方法的通用接口,则将通配符与此绑定:
public void method(Map<? extends S, Model> map) {
答案 1 :(得分:0)
由于A
和B
都扩展了S
,因此map
的通用密钥可以简单地是S
:
public void method(Map<? extends S, Model> map) {
除了创建S
和{{都可以使用的接口之外,您目前无法采取其他措施来限制A
的其他子级成为地图中的键(直到Java获得密封类)。 1}},然后将该接口用作B
的通用密钥。