由于在以下代码中,R扩展为Appendable,我是否应该能够在需要R的地方返回Appendable?
/**
* Produces an R, to which a T has been semantically appended,
* whatever that may mean for the given type.
*/
interface Appendable <R, T>
{
/**
* Append is not expected to modify this Appendable,
* but rather to return an R which is the result
* of the append.
*/
R append(T t);
}
interface PluralAppendable <R extends Appendable<R, T>, T>
extends Appendable<R, T>
{
default R append(T... els)
{
// Easier to debug than folding in a single statement
Appendable<R, T> result = this;
for(T t : els)
result = result.append(t);
/* Error: Incompatible types.
Required: R
Found: Appendable<R, T> */
return result;
}
}
答案 0 :(得分:5)
不,你不能。如果继承是相反的,那么你只能这样做。由于在以下代码中,R扩展为Appendable,我是否应该能够在需要R的地方返回Appendable?
但是,您可以将result
向下转换为R
,以使其进行编译,但它会向您显示未经检查的投射的警告。
return (R)result;
答案 1 :(得分:3)
可以做相反的事情。当您应该返回超类的引用时,可以返回子类。在您的示例中,您尝试反向执行它,当然您需要对类型为R的Object的引用。您不能将其超类的Object传递给R的引用。