Java从泛型方法调用非泛型方法

标签 java generics

我正在尝试重构一些东西。我有以下类层次结构:

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/

相关文章:

java - 数据未从数据库正确返回

swift - 扩展关联类型等于 Void 的自定义类型

java - 具有不总是使用的通用字段的 Bean

java - Java 泛型的乐趣

java - Java内部有Thread.sleep时定时器不会停止

java - 当用户触摸屏幕上的任意位置时,如何一一填充回收器 View ?

java - mapreduce.input.keyvaluelinerecordreader.key.value.separator参数在hadoop安装中的位置

java - 在 Mac 上的 Java 应用程序中使用 R

java - 如何使用枚举实现接口(interface),接口(interface)扩展 Comparable?

c# - 如何将动态用作泛型?