gpt4 book ai didi

java - 自引用类型和有界通配符之间的不良交互

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:53 24 4
gpt4 key购买 nike

这个案例似乎又是Eclipse的Java编译器碾压javac的案例。对我来说唯一的问题是它是否是 JLS 或 javac 中的错误。

interface EndoFunctor< C, FC extends EndoFunctor< C, FC > > { /*...*/ }
interface Algebra< C, FC extends EndoFunctor< ? extends C, FC > > { /*...*/ }

第二行在Eclipse中编译,在javac中编译失败,提示“type parameter FC is not within its bound”。

FC 被声明为扩展 EndoFunctor< ?扩展 C,FC >,FC 上的界限是它为推断的 D 扩展 EndoFunctor< D,FC >,在这种情况下是?扩展 C。我认为 javac 没有意识到通配符在两种情况下都代表相同的未知类型。不过,Eclipse 可以!

显然下面的代码解决了 javac 中的问题:

interface EndoFunctor< C, FC extends EndoFunctor< ? extends C, FC > > { /*...*/ }

但对于该接口(interface),这是一个比我想要的更宽松的定义。

我也可以试试

interface Algebra< C, D extends C, FC extends EndoFunctor< D, FC > >

但这种方法迫使我在任何地方都携带额外的类型参数 D。

怎么办?

最佳答案

What to do?

这里有一些实用的解决方案。

  • 尝试使用 Java 7 最新补丁版本中的 javac。我记得听说过 Java 6 中的某些 javac 编译器错误,这些错误仅在 Java 7 中修复...但我不知道不知道一个列表。 (而且 Java Bugs 数据库在搜索方面毫无希望......)

  • 忍受它,并使用您已经发现“有效”的两个备选方案之一。

关于java - 自引用类型和有界通配符之间的不良交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9937422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com