我有这样的课
public class Foo {
private final Map<Step, Consumer<Step>> context = new LinkedHashMap<>();
public <T extends Step> void save(Consumer<T> consumer, T step) {
this.context.put(step, consumer);
}
}
如您所见,我希望能够在我的
Step
上下文中保存 Map
的子类,但出现以下错误
Provided Consumer<T>, Required Consumer<Step>
有什么方法可以通过使用泛型来达到预期的效果吗?
我试过的一些东西是:
Map
类型更改为 <? extends Step>
,但这会引发新的错误,因为当您使用通配符 ?
时,您似乎有一个只读的 Map
.public class Foo {
private final Map<Step, Consumer<Step>> context = new LinkedHashMap<>();
public <T extends Step> void save(Consumer<T> consumer, T step) {
this.context.put(step, (Consumer<Step>) consumer);
}
}
后者似乎有效,但我在控制台上收到
Unchecked cast
警告。如果这是要走的路,我想知道它的缺点是什么以及检查它的合适方法是什么。
编译器无法确认作为 Map 键的 Step 的子类型与 Map 中键值的 Consumer same 子类型。
你知道,所以你知道未经检查的演员表是安全的。
与未经检查的演员一起去。