2016-02-29 72 views
0

我有三个接口:如何实现已经参数化并扩展了两个其他接口的接口?

public interface IAggregable<TElement extends IAggregable<TElement, TResult>, TResult> { 
    TResult aggregate(TResult intermediateResult); 
} 

public interface IDeeplyCloneable<TElement extends IDeeplyCloneable<TElement>> { 
    TElement deepClone(); 
} 

public interface IContainer<TElement extends IAggregable<TElement, TResult> & IDeeplyCloneable<TElement>, TResult> { 
    TResult aggregateAllElements(); 
    TElement cloneElementAtIndex(int index); 
} 

我尝试落实最后一个;

public class GTZCH<TElement, TResult> implements IContainer<TElement, TResult> { 

    public GTZCH() { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public TResult aggregateAllElements() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public TElement cloneElementAtIndex(int index) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

,但我得到一个编译错误:

Bound mismatch: The type TElement is not a valid substitute for the bounded parameter <TElement extends 
IAggregable<TElement,TResult> & IDeeplyCloneable<TElement>> of the type IContainer<TElement,TResult> 

什么&运营商在exends部分是指,我认为应该有一个昏迷不&扩展多个接口。

如何实现该接口的方式我不会使用原始类型?

+0

这是'型和一个'约束。请参阅[关于类型边界的教程](https://docs.oracle.com/javase/tutorial/java/generics/bounded.html)。 –

回答

0

是的,你应该在类型限制使用&并定义声明GTZCH当您绑定的TElement:

public class GTZCH<TElement extends IAggregable<TElement,TResult> & IDeeplyCloneable<TElement>, TResult> implements IContainer<TElement, TResult> { 
    [...] 
} 
相关问题