我正在使用具有继承性的流畅接口。我html" target="_blank">声明基类Constructor受保护,因此您不能创建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>
本质上,您有一个递归类型声明。
Foo<T extends Foo<T>>
。
假设您有一个Foo<Foo>
。这意味着T
已映射到Foo
。但是Foo
不是的子类型Foo<T>
,在这种情况下是Foo<Foo>
,所以您真正要寻找的是Foo<Foo<Foo>>
。但是请稍等,最里面Foo
的没有被键入,所以我想是Foo<Foo<Foo<Foo>>>
…哦,算了!
要在上面放一个更容易理解的面孔,请考虑是否有Foo<T extends List<T>>
。您可以T
在声明/实例化中使用Foo
什么?
List<String>
? List<List>
?
您似乎找到了一种“打破”递归循环的方法。最终,您需要获得一种归类化的类型。以您发现ConcreteFoo
对自己有用的方式相同,对于List
上面的示例,您可以类似地使用某些类ConreteListOfItself implements List<ConreteListOfItself>
来破坏递归循环。
我有2个抽象的类操纵泛型和一个工厂与泛型。父级独立于trips对象和因式分解代码。儿子只基于trips。 Eclipse上的AbstractTripBasedPurchaseExtractor第9行出现错误:Bound mismatch:类型TRIP_PURCHASE不是bounded参数的有效替代品 类型的 此处:extends AbstractPurchaseExtractor“ 在son类上
为了在 .NET Core 中使用依赖关系注入,我们构建了一堆存储库接口,供控制器用于数据库交互。 我们有一个< code>EntityBase类,其中包含一些方法,我们的通用存储库接口使用这个基类,例如:< code>IRepository 我想添加一个更具体的 类,该类扩展了 ,以表示我们有一些要按标记筛选的实体。我希望 有一个抽象属性,我可以在控制器中使用该属性,以便我可以抽象出来并重用过滤
问题内容: 我正在编写一个流畅的API,以配置和实例化一系列“消息”对象。我有消息类型的层次结构。 为了在使用Fluent API时能够访问子类的方法,我使用了泛型来对子类进行参数化,并使所有的fluent方法(以“ with”开头)都返回泛型类型。注意,我省略了流利方法的大部分内容。其中进行了许多配置。 具体的子类类似地重新定义泛型。 该代码有效,即,我可以实例化任何类并使用所有流利的方法: 以
问题内容: 我有以下界面: 我在下面有抽象类(没有提到方法插入): 我有具体的课程: 最后,SpecificEntryBean定义为: 我有以下错误: 类型SpecificEntry必须实现继承的抽象方法SingleRecordInterface.insert(AbstractEntryBean) 考虑到SpecificEntryBean扩展了AbstractEntryBean,所以我不明白此错误
我有一个父类和子类、和,它们描述了如何购买水果的不同类型。 在篮子里插入购买的特定水果; 计算购买水果的总价值; 计算用于给定类型水果(水果名称)的总金额 为了与其他项目的类兼容,在各个类中使用的执行要支付金额的计算的方法将具有名称payFruit,返回类型double并且没有参数。此方法必须在接口中声明。 注意:我知道这可能对我的情况很特殊,对其他人没有太大帮助,但我发现这个类层次结构在使用时有
我有一个典型的问题,什么是更好的,我认为答案总是视情况而定,但我还是想澄清一下。所以有两种方法: 逻辑是: 我知道由于类型擦除,方法签名存在冲突,所以我的问题不是“为什么我不能同时拥有这两个方法?”,而是“你会选择哪种方法?”。