我有以下问题:
具有简单侦听器的接口,从库中
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);
}
我该怎么做?
答案 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
中的RequestListener
和IglooListener
中的另一个方法中有两种方法。希望这会有所帮助。
答案 3 :(得分:0)
不幸的是,这在Java中是不可能的,因为您的继承类会将可能的输入参数类型缩小到最初允许的子集,因此可能不像原来的接口那样。
编辑就像其他答案状态一样,你可以添加带有此签名的方法,但它不会覆盖接口方法。