我具有以下接口层次结构(删除了所有不相关的功能)。尝试编译时出现此错误:
types ValidLineGettable and ValidateValue<java.lang.String> are incompatible; both define getObjectCopy(), but with unrelated return types
这些都是从相同的函数派生而来的-不是两个具有相同名称 的不同函数,在同一接口中的相同函数 。你如何处理与接口 必须 从两个不同的接口继承 自己 必须从单一基接口继承?
就我而言,它在概念上和名称上都是相同的功能。
(尽管我对Copyable接口是否是一个好主意感兴趣,但是我对它的使用很感兴趣。它在我使用的 许多 代码中都很好,并且对我来说效果很好…我对通用继承/设计最感兴趣。题。)
Copyable
我不清楚如何最好地处理此问题。我将不胜感激任何建议。谢谢。
public interface Copyable { Copyable getObjectCopy(); } interface ValidateValue<O> extends Copyable { //Other functions... @Override ValidateValue<O> getObjectCopy(); } //For classes that may be able to be Decorated into a TextLineValidator interface ValidLineGettable extends Copyable { //Other functions... ValidLineGettable getObjectCopy(); } interface TextLineValidator extends ValidateValue<String>, ValidLineGettable { //Other functions... @Override TextLineValidator getObjectCopy(); }
错误:
C:\java_code\Copyable.java:17: types ValidLineGettable and ValidateValue<java.lang.String> are incompatible; both define getObjectCopy(), but with unrelated return types interface TextLineValidator extends ValidateValue<String>, ValidLineGettable { ^ 1 error Tool completed with exit code 1
假设所有返回值Copyable都为extension,则所有版本的getObjectCopy()返回Copyable。例如:
public interface ValidateValue<O> extends Copyable { // Other functions... @Override Copyable getObjectCopy(); } public Blammy implements ValidateValue<String> { // Other functions... @Override public Copyable getObjectCopy() { SomethingThatExtendsCopyable blammy = new SomethingThatExtendsCopyable(); return (Copyable)blammy; } }
在上面的代码中,错误是由以下事实引起的:“ getObjectCopy”方法在ValidateValue<String>和ValidLineGettable接口中具有不同的返回值,但调用签名相同。在Java中,仅通过更改返回值就不会获得多态。这会导致编译错误。
ValidateValue<String>
ValidLineGettable
如果将返回值更改为,Copyable则TextLineValidator不再通过扩展其两个父接口来获得值。一种更简单的方法是拥有一个接口(可复制)和实现该接口的多个类,每个类都返回一个可复制值,该值可以是扩展(或实现)可复制类的实例。
TextLineValidator