为什么不能扩展接口“泛型方法”并将其类型缩小到继承的接口“类通用”?

异想天开的

我展示了一个简单的例子。想象一下通用类型C表示颜色类型:因此,为了简化视觉,假设C是C扩展颜色

interface Screen {
   <C> Background<C> render(Plane<C> plane);
}

interface MonochromeScreen<C> extends Screen{
       @Override
       Background<C> render(Plane<C> plane);  
}

这将引发名称冲突编译错误,解释为两者具有相同的类型擦除但不可覆盖。

但是我不明白为什么我们不能简单地允许覆盖签名,只要它更具限制性。我的意思是,毕竟,唯一的区别是泛型类型的范围,在Screen中是方法范围的,而在MonochromeScreen是类范围的。

当父方法在类级别强制执行一致性时,允许将子方法覆盖为方法范围的泛型是没有意义的,但是我认为是这样的:我的父接口可能有20个具有不相关泛型类型的方法,但是我的子类会迫使它们全部与不兼容的额外规范/合同相同(这是任何扩展接口的作用),毕竟,单色滤网仍然是一个屏幕,因为它可以用任何颜色进行绘制,我只是强制使用该颜色(无论是哪种颜色),使其与孩子的其他功能保持一致,只是缩小类级别而不是方法级别的可能性。

考虑该功能是否存在根本错误的假设?

编辑:我接受了Sotirios Delimanolis的回答,他非常聪明地发现了正确的问题,我不是在寻求解决方案,但是对于那些想知道如何克服这种情况的人,我自己的回答中有一个窍门

Sotirios Delimanolis

这是中断的地方:

MonochromeScreen<Red> redScreen = ...;
Screen redScreenJustAScreen = redScreen;
Plane<Blue> bluePlane = null;
redScreenJustAScreen.<Blue>render(bluePlane);

如果您建议的内容在编译时有效,则上面的代码片段在运行时可能必须失败,ClassCastException因为所引用的对象redScreenJustAScreen期望aPlane<Red>却收到了Plane<Blue>

适当地使用泛型,可以防止上述情况的发生。如果允许此类覆盖规则,则泛型将失败。

对于您的用例,我还不太了解,但似乎并不是真的需要泛型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与泛型类型方法的接口

来自分类Dev

为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

来自分类Dev

从类中获取泛型参数的类型,该类是从泛型接口继承的

来自分类Dev

为什么实现具有类型约束的泛型接口的泛型类需要重复这些约束?

来自分类Dev

Typescript泛型扩展类和接口

来自分类Dev

具有接口类类型的泛型

来自分类Dev

为什么在结构上允许接口继承以及为什么不能继承类

来自分类Dev

接口与实现接口的类的泛型类型有关?

来自分类Dev

接口方法Java中的泛型类型

来自分类Dev

接口方法的泛型类型约束

来自分类Dev

为什么List使用显式接口方法实现来实现非泛型接口方法?

来自分类Dev

为什么在Java中可以将接口的泛型方法实现为非泛型?

来自分类Dev

为什么我不能在用具体类型替换接口的类上实现接口?

来自分类Dev

继承通用接口的具体类

来自分类Dev

为什么不能在内部接口中使用泛型?

来自分类Dev

为什么不能从具有通用参数的类型转换为通用接口,该类型是接口中通用参数的子类型?

来自分类Dev

旋转文本并将其容器缩小到新的宽度

来自分类Dev

如何编写循环以从输出中删除NULL并将其缩小到所需的长度?

来自分类Dev

扩展通用类并实现接口

来自分类Dev

为什么继承类静态方法而不继承接口静态方法?

来自分类Dev

在接口中使用泛型时无法转换/匹配类型,为什么?

来自分类Dev

为什么Map接口不限制键通用类型扩展Comparable?

来自分类Dev

为复杂的泛型类型创建类或接口

来自分类Dev

为什么在Web api方法中返回接口时,为什么我得到带有接口值的继承类的值?

来自分类Dev

为什么不能覆盖接口的方法?

来自分类Dev

为什么不能覆盖接口的方法?

来自分类Dev

如何遍历类列表并将其用作泛型类型?

来自分类Dev

如何定义一个通用包装器接口类型并将其用作Java中的方法返回类型?

来自分类Dev

C#泛型,接口和继承

Related 相关文章

  1. 1

    与泛型类型方法的接口

  2. 2

    为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

  3. 3

    从类中获取泛型参数的类型,该类是从泛型接口继承的

  4. 4

    为什么实现具有类型约束的泛型接口的泛型类需要重复这些约束?

  5. 5

    Typescript泛型扩展类和接口

  6. 6

    具有接口类类型的泛型

  7. 7

    为什么在结构上允许接口继承以及为什么不能继承类

  8. 8

    接口与实现接口的类的泛型类型有关?

  9. 9

    接口方法Java中的泛型类型

  10. 10

    接口方法的泛型类型约束

  11. 11

    为什么List使用显式接口方法实现来实现非泛型接口方法?

  12. 12

    为什么在Java中可以将接口的泛型方法实现为非泛型?

  13. 13

    为什么我不能在用具体类型替换接口的类上实现接口?

  14. 14

    继承通用接口的具体类

  15. 15

    为什么不能在内部接口中使用泛型?

  16. 16

    为什么不能从具有通用参数的类型转换为通用接口,该类型是接口中通用参数的子类型?

  17. 17

    旋转文本并将其容器缩小到新的宽度

  18. 18

    如何编写循环以从输出中删除NULL并将其缩小到所需的长度?

  19. 19

    扩展通用类并实现接口

  20. 20

    为什么继承类静态方法而不继承接口静态方法?

  21. 21

    在接口中使用泛型时无法转换/匹配类型,为什么?

  22. 22

    为什么Map接口不限制键通用类型扩展Comparable?

  23. 23

    为复杂的泛型类型创建类或接口

  24. 24

    为什么在Web api方法中返回接口时,为什么我得到带有接口值的继承类的值?

  25. 25

    为什么不能覆盖接口的方法?

  26. 26

    为什么不能覆盖接口的方法?

  27. 27

    如何遍历类列表并将其用作泛型类型?

  28. 28

    如何定义一个通用包装器接口类型并将其用作Java中的方法返回类型?

  29. 29

    C#泛型,接口和继承

热门标签

归档