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

Java 不能用不同的参数继承

Java 不能用不同的参数继承

温温酱 2022-07-27 21:03:21
我在实际继承接口时遇到了麻烦。我一直以错误结束错误:NameableContainer 不能用不同的参数继承:<Friend> 和 <>我有以下接口:public interface Nameablepublic interface Namepublic interface Friend extends Nameablepublic interface NameableContainer<T extends Nameable> {    void add(Name name, Name prevName);    void remove(Nameable nameable);    T findByName(Name name);}public interface FriendContainer extends NameableContainer<Friend>我还有一个继承 NameableContainer 的抽象类。public abstract class NameableMap implements NameableContainer {    public void add(Name name, Name prevName) { /* do stuff*/ }    public void remove(Nameable nameable) { /* do stuff*/ }    public Nameable findByName(Name name) { /* do stuff*/ }}最后,试图把这些放在一起public class Friends extends NameableMap implements FriendContainer我错过了什么?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

当您说时,您正在使用原始类型


public abstract class NameableMap implements NameableContainer

这会在编译器中抛出所有东西;除非您的代码最初是为 java 1.4 或更早版本编写的,否则原始类型是错误的。当你实现一个指定类型参数的接口时,你要么需要提供一个具体类型,要么如果还不知道,你可以引入另一个类型参数并将它传递给超类型。


请参阅:什么是原始类型,为什么我们不应该使用它?


因此,您在实现时指定了一个可变的泛型类型参数NameableContainer(因为您还不知道具体类型,因为它NameableMap也应该适用于所有 Nameables。


public abstract class NameableMap<T extends Nameable> implements NameableContainer<T>

//                               ^^^^^^^^^^^^^^^^^^^^                             ^^^



查看完整回答
反对 回复 2022-07-27
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

将整个程序中的所有代码移到一个类中并放在一行



查看完整回答
反对 回复 2022-07-27
  • 2 回答
  • 0 关注
  • 346 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号