覆盖具有不同签名的接口

时间:2014-02-15 12:39:23

标签: java

我有以下问题:

具有简单侦听器的接口,从库中

public interface RequestListener<RESULT> {

    void onRequestFailure(FooException fooException);

    void onRequestSuccess(RESULT result);
}

扩展FooException的类:

 public class MyCustomFooException extends FooException {
      . . .
    }
}

我需要overload使用我的自定义类onRequestFailure方法签名。

类似的东西:

public interface MyCustomListener<RESULT> extends RequestListener<RESULT> {

    @Override
    public void onRequestFailure(MyCustomFooException e);

    @Override
    public void onRequestSuccess(RESULT result);

}

我该怎么做?

4 个答案:

答案 0 :(得分:2)

你不能这样做(在课堂上)。如果您这样做,则不再实现RequestListener接口。你需要使用完全相同的签名 界面:void onRequestFailure(FooException fooException);

如果您在界面中执行此操作并且使用其他签名,则只需向其添加新方法即可扩展原始界面。如果稍后非抽象类实现扩展的IglooListener接口,则必须定义这两种方法。

答案 1 :(得分:1)

您可以在界面中使用其他类型的参数:

public interface RequestListener<RESULT,T extends FooException> {

    void onRequestFailure(T fooException);

    void onRequestSuccess(RESULT result);
}

然后,当您实现界面时,您可以定义:

public interface IglooListener<RESULT> extends RequestListener<RESULT,MyCustomFooException> {

    @Override
    public void onRequestFailure(MyCustomFooException e);

    @Override
    public void onRequestSuccess(RESULT result);

}

答案 2 :(得分:0)

只需从@Override界面中的方法中删除IglooListener即可。你会很高兴。在这种情况下,您将IglooListener中的RequestListenerIglooListener中的另一个方法中有两种方法。希望这会有所帮助。

答案 3 :(得分:0)

不幸的是,这在Java中是不可能的,因为您的继承类会将可能的输入参数类型缩小到最初允许的子集,因此可能不像原来的接口那样。

编辑就像其他答案状态一样,你可以添加带有此签名的方法,但它不会覆盖接口方法。