gpt4 book ai didi

java - 如何将泛型类型限制为类的子类型?

转载 作者:行者123 更新时间:2023-11-30 08:31:15 25 4
gpt4 key购买 nike

我有以下类层次结构:

class ListItem<T> {
}

abstract class ListView<T> {
abstract void render(final ListItem<T> item);
}

现在,我想创建一个 ListView 的通用实现接受 Consumer 的实例.我的尝试如下:

class CommonListView<T> extends ListView<T> {

private final Consumer<ListItem<T>> itemConsumer;

CommonListView(Consumer<ListItem<T>> itemConsumer) {
this.itemConsumer = itemConsumer;
}

@Override
void render(ListItem<T> item) {
itemConsumer.accept(item);
}
}

interface Consumer<E> {

void accept(E item);
}

它几乎可以满足我的需要,但我想限制 EConsumer成为 ListItem 的子类型.添加<E extends ListItem<E>>不幸的是失败了。

最佳答案

<E extends ListItem<E>>是沿着正确的路线但不是很正确并且看起来实际上是周期性的。

如果您不关心 ListItem 是什么,您可以这样做:

  <E extends ListItem<?>>

但是,更正确的版本应该是 Andy 所说的添加一个额外的类型参数,如下所示:

class ListItem<T> {
}

abstract class ListView<T> {
abstract void render(final ListItem<T> item);
}

class CommonListView<T> extends ListView<T> {

private final Consumer<T, ListItem<T>> itemConsumer;

CommonListView(Consumer<T, ListItem<T>> itemConsumer) {
this.itemConsumer = itemConsumer;
}

@Override
void render(ListItem<T> item) {
itemConsumer.accept(item);
}
}

interface Consumer<T, E extends ListItem<T>> {
void accept(E item);
}

但是,我认为您在回复 Andy 时是在说这行不通?你能解释一下它为什么不起作用吗?

关于java - 如何将泛型类型限制为类的子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40752621/

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