3

我试图将 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) 

解决这种情况。但是,我最初想要的是创建一个接口 ( ICountable) 来扩展其他 3 个接口(2 个标记和 1 个接口,描述实现类add在相同类型的对象上执行的能力)。我需要更改以使add方法实现BaseCounter如下所示:

public BaseCounter add(BaseCounter other)

我会很感激你的建议。

4

2 回答 2

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;
    }
}
于 2012-06-01T06:17:07.827 回答
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) { ... }
}

这应该可以解决问题..

于 2012-06-01T06:18:21.827 回答