【发布时间】:2013-10-26 12:22:04
【问题描述】:
这是Java inherited Fluent method return type in multiple level hierarchies的简化版。
给定以下代码:
public enum X {
;
static interface BaseFoo<T, S extends BaseFoo<T, S>> {
S foo();
}
static interface Foo<T> extends BaseFoo<T, Foo<T>> {
void foo1();
}
static interface BaseBar<T, S extends BaseBar<T, S>> extends BaseFoo<T, S> {
S bar();
}
static interface Bar<T> extends BaseBar<T, Bar<T>>, Foo<T> {
void bar1();
}
}
运行javac X.java我收到错误消息:
X.java:15: error: BaseFoo cannot be inherited with different arguments: <T,X.Bar<T>> and <T,X.Foo<T>>
static interface Bar<T> extends BaseBar<T, Bar<T>>, Foo<T> {
^
谁有解决办法?
声明:我正在尝试使用该模式在容器类继承层次结构中实现fluent interface。
背景:为了让人们更容易理解我为什么需要这个,这是故事。我想创建一个容器系列:Traversal Sequence List。所以Traversal有一个方法Traveral<T> accept(Visitor<T>)(没有PECS简称),这个方法应该总是在遍历元素之后返回this。当我有一个List 类型时,我希望该方法返回List<T> 而不是Traversal<T>,因为我希望可以调用类似myList.accept(v).head(15) 的东西,其中head(int) 是List 而不是@ 的方法987654341@
【问题讨论】:
标签: java generics inheritance fluent fluent-interface