在Java中,是否可以使用具有两个类型参数的通用接口作为子类型接口的基础,每个接口具有一个固定类型参数?

时间:2015-04-19 19:41:54

标签: java generics covariance contravariance

我有一个"基地"接口:

public interface TargetActionDelegate<TTarget extends Target, TAction extends Action> {
    void handle(TTarget target, TAction action);
}

以及修复一个类型参数的以下相关接口:

public interface TargetDelegate<TTarget extends Target> {
    <TAction> void handle(TTarget target, TAction action);
}

public interface ActionDelegate<TAction extends Action> {
    <TTarget> void handle(TTarget target, TAction action);
}

现在在我看来,这些单类型固定接口应该是基接口的超集,因为它们每个都处理基本情况和许多其他接口。此外,由于它们都包括底座,它们应该能够从底座伸出。

我想做的事情就像......

public interface TargetDelegate<TTarget extends Target> extends TargetActionDelegate<TTarget, ?ANYTHING? extends Action> {
    <TAction> void handle(TTarget target, TAction action);
}

public interface ActionDelegate<TAction extends Action> extends TargetActionDelegate<?ANYTHING? extends Target, TAction> {
    <TTarget> void handle(TTarget target, TAction action);
}

但是我找不到这个OR的正确语法(我认为此时更有可能)我特别关注泛型和Java泛型。

指导赞赏。

1 个答案:

答案 0 :(得分:2)

我相信你想要的只是:

public interface ActionDelegate<TAction extends Action> extends TargetActionDelegate {
    <TTarget> void handle(TTarget target, TAction action);
}

public interface TargetDelegate<TTarget extends Target> extends TargetActionDelegate {
    <TAction> void handle(TTarget target, TAction action);
}