通用接口混乱

时间:2012-06-01 06:12:14

标签: java generics interface

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

我很感激你的建议。

2 个答案:

答案 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) { ... }
}

这应该解决问题..