【发布时间】:2013-08-02 13:38:45
【问题描述】:
由于在下面的代码中,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;
}
}
【问题讨论】:
-
如何在接口中定义方法,这段代码无法编译。
-
所以,就像
return (R) result;一样投射它?好吧,我只是想确保我理解这个权利并且那个演员表是有效的。如果您的意思是将结果声明为 R,如R result = this;,则会引发“不兼容的类型:必需的 R,找到 PluralAppendable,这确实有意义,因为 PluralAppendable 不扩展 R,它扩展了 Appendable -
接口中的“默认”修饰符和方法体在我正在使用的 Java 8 中可用
-
@MattG。哦!对不起。还没用过Java 8。
标签: java generics covariance java-8