我试图将3个接口封装在一个(ICountable
)中,并使具体类实现这个封装接口。 `ICountable
代码:
public interface ICountable extends IAddable, Cloneable, Serializable {}
Addable
接口定义是:
public interface IAddable<T> {
T add(T other);
}
现在,当我尝试在具体类(ICountable
)中实现BaseCounter
时,我收到的错误是并非所有方法都已实现(在add
方法上抱怨)。我不明白为什么。 BaseCounter
代码如下:
public class BaseCounter implements ICountable {
@Override
public BaseCounter add(BaseCounter other) {
// TODO Auto-generated method stub
return null;
}
}
将add
方法签名更改为
public ICountable add(ICountable other)
修复了这种情况。
但是,我最初想要的是创建一个扩展3个接口的接口(ICountable
)(2个标记和1个接口,描述实现类在同一个对象上执行add
的能力类型)。为了在add
中实现BaseCounter
方法,我需要更改的内容如下所示:
public BaseCounter add(BaseCounter other)
我很感激你的建议。
答案 0 :(得分:7)
1将通用添加到ICountable
public interface ICountable<T> extends IAddable<T>, Cloneable, Serializable {}
2在实施中指定通用
public class BaseCounter implements ICountable<BaseCounter> {
@Override
public BaseCounter add(BaseCounter other) {
// TODO Auto-generated method stub
return null;
}
}
答案 1 :(得分:3)
如果没有编译代码,我认为你需要在接口中添加泛型类型。如果类型没有传递给接口,那么这些方法无法知道要给出的返回类型(当然,除了ICountable,你也提到过,工作过)。实施例
public interface IAddable<T> {
T add(T other);
}
public interface ICountable<T> extends IAddable<T>, ... {
....
}
public class BaseCounter implements IAddable<T> {
@Override public BaseCounter add(BaseCounter other) { ... }
}
这应该解决问题..