gpt4 book ai didi

java - 泛型参数接口(interface)回调

转载 作者:行者123 更新时间:2023-12-02 12:32:46 25 4
gpt4 key购买 nike

我有一个通用容器接口(interface),用于抽象 Android SparseArray在Java代码中:

public interface MyContainer<T> {
T get(int key);
void forEach(Consumer<T> consumer);
}

我有一个类,其容器为 Implementation ,但我只想暴露Interface外部:

MyContainer<Implementation> data;
Interface get(int key) {
return data.get(key);
}
void method(Consumer<Interface> callback) {
data.forEach(callback); //here
}

但是我收到编译器错误:

error: incompatible types: Consumer<Interface> cannot be converted to Consumer<Implementation>

我怎样才能改变MyContainer接口(interface)允许 Consumer<Interface>传递给我的类(class)?

最佳答案

MyContainerConsumer的类型参数可以有 T作为下限。

void forEach(Consumer<? super T> consumer);

这样就消耗了 T 的父类(super class)型。可以作为参数传入。

对于Consumer本身,如果它可以处理 T 的父类(super class)型,那么它可以处理 T以及。这是 PECS 的一部分 - 生产者扩展,消费者 super 。

然后,在 method ,你可以通过 Consumer<Interface>forEach 。在这里,TImplementation 。类型InterfaceImplementation 的父类(super class)型,所以这是下限允许的。

关于java - 泛型参数接口(interface)回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com