Java Bound Mistmatch

时间:2016-05-25 18:22:44

标签: java generics

我正在编写代表数学项目的课程。它们成对出现:一个(称为B)定义一个集合的元素,另一个(public abstract class Vector<C extends Constant<C,B>, B extends BaseRing<C,B>> implements Element<C,B, Vector<C,B>, VectorialSpace<C,B>> { } public abstract class VectorialSpace<C extends Constant<C,B>, B extends BaseRing<C,B>> implements Ring<C,B, Vector<C,B>, VectorialSpace<C,B>> { } public abstract class PolyCoeff<C extends Constant<C,B>, B extends BaseRing<C,B>> extends Vector<C,B> { } public class RingPoly<C extends Constant<C,B>, B extends BaseRing<C,B>> extends VectorialSpace<C,B> { } public interface Constant<C extends Constant<C,B>, B extends BaseRing<C,B>> { } public interface BaseRing<C extends Constant<C,B>, B extends BaseRing<C,B>> { } public interface Element<C extends Constant<C,B>, B extends BaseRing<C,B>, E extends Element<C,B,E,R>, R extends Ring<C,B,E,R>> extends Constant<E,R> { } public interface Ring<C extends Constant<C,B>, B extends BaseRing<C,B>, E extends Element<C,B,E,R>, R extends Ring<C,B,E,R>> extends BaseRing<E,R> { } )表示集合。相关课程是:

C

请注意:

  • 在每个类中,泛型类型Constant<C,B>实现接口B,泛型类型BaseRing<C,B>实现接口PolyCoeff<C,B>
  • Vector<C,B>不是我工作空间中RingPoly<C,B>的唯一子类,VectorialSpace<C,B>也不是public class Homomorphism< C1 extends Constant<C1,B1>, B1 extends BaseRing<C1,B1>, C2 extends Constant<C2,B2>, B2 extends BaseRing<C2,B2> > { public static <C extends Constant<C,B>, B extends BaseRing<C,B>> Homomorphism<C,B,PolyCoeff<C,B>,RingPoly<C,B>> ringToPolyRingHomeo(B ring){ [...] } } 的唯一子类。

之前描述的类和接口没有任何问题。然而,以下是:

Bound mismatch: The type PolyCoeff<C,B> is not a valid substitute for the bounded parameter <C2 extends Constant<C2,B2>> of the type Homomorphism<C1,B1,C2,B2>

报告的错误是:

Bound mismatch: The type RingPoly<C,B> is not a valid substitute for the bounded parameter <B2 extends BaseRing<C2,B2>> of the type Homomorphism<C1,B1,C2,B2>

PolyCoeff<C,B>

Vector<C,B>扩展了抽象类Element<C,B,Vector<C,B>,VectorialSpace<C,B>,后者又实现了接口Constant<Vector<C,B>, VectorialSpace<C,B>>,后者又扩展了接口PolyCoeff<C,B>。因此,Constant<Vector<C,B>, VectorialSpace<C,B>>实现Vector<C,B> 是特定类型的Vector<C,B>

我的问题是:为什么这还不够?考虑到我有 <{1}}的其他子类,我该如何解决问题?

2 个答案:

答案 0 :(得分:0)

为了满足C2 extends Constant<C2, B2>的类型范围,PolyCoeff<C, B>必须实现Constant<PolyCoeff<C, B>, RingPoly<C, B>>,而不是? super ...

我意识到这并没有告诉您需要更改什么才能使代码正常工作。我怀疑这需要你的一些类型界限来说? extends ...@(Html.Kendo().Grid<DtoStuff>() .Name("grid") .Columns(columns => { columns.Bound(c => c.Number); columns.Bound(c => c.Date); columns.Bound(c => c.Total); }) .Reorderable(reorderable => reorderable.Columns(true)) .Resizable(resizable => resizable.Columns(true)) .Pageable() .Filterable(f => f.Extra(false).Mode(GridFilterMode.Menu)) .Sortable(sorting => sorting.SortMode(GridSortMode.SingleColumn).AllowUnsort(false)) .ColumnMenu() .DataSource(dataSource => dataSource .Ajax() .ServerOperation(true) .PageSize(15) .Model(model => model.Id(p => p.Number)) .Read(read => read .Url("https://local-api.net/Customer/v1/Stuff/Stuffs") ) .Sort(s => s.Add("Date").Descending()) .Filter(f => f.Add(a => a.Date).IsGreaterThanOrEqualTo(DateTime.Now.AddYears(-1))) ) ) ,但我没有足够的分析你的课程,告诉他们应该去哪里。

答案 1 :(得分:0)

找到一种方法:现在VectorVectorialSpace具有以下标题:

public interface Vector<C extends Constant<C,B>, B extends BaseRing<C,B>, V extends Vector<C,B,V,VS>, VS extends VectorialSpace<C,B,V,S>> extends Element<C,B,V,VS>

public interface VectorialSpace<C extends Constant<C,B>, B extends BaseRing<C,B>, V extends Vector<C,B,V,VS>, VS extends VectorialSpace<C,B,V,S>> extends Ring<C,B,V,VS>