我正在尝试重构一些东西。我有以下类层次结构:
class BaseItem {..}
class ItemA extends BaseItem {..}
class ItemB extends BaseItem {..}
class BaseContext<T extends BaseItem> {..}
class ContextA extends BaseContext<ItemA> {..}
class ContextB extends BaseContext<ItemB> {..}
以及消费者需要使用的 2 个方法:
public void methodA(ItemA) {..}
public void methodB(ItemB) {..}
是否有可能为这两种方法提供一个通用的消费者?现在,我有 2 个非通用的:
Consumer<ContextA> consumerA = ctx -> methodA(ctx.getItem());
Consumer<ContextB> consumerB = ctx -> methodB(ctx.getItem());
我想说,由于类型删除,这是不可能的,我只是想确定一下
最佳答案
在我看来,您可以使用通用方法将您的 Item
消费者转换为 Context
消费者。它可能看起来像这样。目前尚不清楚这是否满足您的要求,因为我不确定您打算如何使用上下文使用者。
public <T extends BaseItem, U extends BaseContext<T>> Consumer<U> wrap(Consumer<T> innerConsumer) {
return context->innerConsumer.accept(context.getItem());
}
然后你就会有
Consumer<ContextA> consumerA = wrap(this::methodA);
Consumer<ContextB> consumerB = wrap(this::methodB);
关于Java从泛型方法调用非泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53144282/