【发布时间】:2011-12-19 01:10:16
【问题描述】:
我正在使用带有继承的流畅接口。我声明了基类构造函数受保护,因此您不能创建一个 Foo
public class Foo<T extends Foo<T>> // if i change to extends Foo i only get warnings
{
public static Foo<Foo> createFoo() // <-- error
{
return new Foo<Foo>(); // <-- error
}
protected Foo() {}
public T add()
{
//...
return (T)this;
}
}
public class Bar extends Foo<Bar>
{
public Bar sub()
{
//...
return this;
}
}
这主要是关于流畅接口、特定领域语言和泛型的练习(个人而非家庭作业),所以请不要问我需要它做什么。
编辑:Eclipse 错误
Bound mismatch: The type Foo is not a valid substitute for the bounded parameter <T extends Foo<T>> of the type Foo<T>
【问题讨论】:
-
This answer 应该有助于解释您所看到的错误的含义(特别是在粗体编辑之后)。以后请在您的问题中发布完整的错误消息。
-
我不知道投反对票的目的是什么,我在谷歌上搜索了自绑定泛型类型,但找不到我的问题的答案。
-
@Stefan 同意,完全有效的问题。赞成反对。
-
链接的答案实际上帮助我解决了问题。将 Foo 声明更改为:公共抽象类 AbstractFoo
>。创建最终类 ConcreteFoo 扩展 AbstractFoo 没有额外的功能。然而,它确实破坏了一些继承。 -
如果你像这样“滥用”(无意冒犯)泛型,它们真的会很痛苦。我真的是他们的朋友,但有时他们会让编写代码变得更加困难,因为没有他们。尝试声明不同的类型而不是递归结构,这很难维护和扩展。
标签: java generics inheritance fluent-interface