为了账号安全,请及时绑定邮箱和手机立即绑定

如何在此接口中重写此方法(请参阅代码)?

如何在此接口中重写此方法(请参阅代码)?

GCT1015 2022-09-28 14:47:33
我有一个名为A的接口:public interface A {     void X(T t);}然后我有两个子类(B和C)来实现这个接口,但是它们中的每一个都向X传递不同的类型,假设B传递类型foo,C传递类型栏:public class B implements A {    @Override    public <T extends foo> void X(T type1)}public class C implements A {    @Override    public <T extends bar> void X(T type2)}我做错了什么,为什么这不起作用?编译器一直告诉我“方法不会从其超类中重写方法”。提前致谢!
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

即使使用泛型方法,当它们被重写时,泛型也必须完全匹配。


可能不符合要求的一种方法是删除实现类的上限,例如


class B implements A {

    @Override

    <T> void X(T type1) { /* impl */ }

}

但是,如果需要上限,则在接口上使用类型参数表示上限。


interface A<U> { 

    <T extends U> void X(T t);

}

然后,可以在实现类中提供上限的类型参数。


class B implements A<Foo> {

    @Override

    public <T extends Foo> void X(T type1) { /* impl */ }

}


class C implements A<Bar> {

    @Override

    public <T extends Bar> void X(T type2) { /* impl */ }

}

但是,因为您可以调用的任何内容都可以调用 or ,也许这些方法不需要是泛型的。TFooBar


interface A<T> { 

    void X(T t);

}

class B implements A<Foo> {

    @Override

    public void X(Foo type1) { /* impl */ }

}


class C implements A<Bar> {

    @Override

    public void X(Bar type2) { /* impl */ }

}


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信