2012-06-01 43 views
3

我想在一个封装3个接口(ICountable)并使具体类实现这个封装接口。 `ICountable代码:通用接口混乱

public interface ICountable extends IAddable, Cloneable, Serializable {} 

Addable接口定义是:

public interface IAddable<T> { 
    T add(T other); 
} 

现在,当我试图(抱怨在具体的类(BaseCounter)我得到的是并不是所有的方法都是执行的错误来实现ICountableadd方法)。我不明白为什么。该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) 

我会感激你的建议。

回答

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; 
    } 
} 
+0

谢谢,伙计!赶上upvote ... – aviad

+0

你很好。您可以添加一些扩展到通用限制,即只能添加ICountable的限制:public interface ICountable 扩展IAddable ,Cloneable,Serializable {}。在这种情况下,只有ICountable的实现可以被接受为泛型类型。 – alexey28

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

这应该解决这个问题..

+0

谢谢!像alexey28's一样的想法。我upvote(但接受去他,因为他是第一:)) – aviad

+0

公共类BaseCounter实现IAddable - foget将泛型T更改为BaseCounter – alexey28