java - 将类的子类作为类型参数传递(类型参数是子类)
问题描述
让我们考虑一下:
public class Text extends BinaryComparable
implements WritableComparable<BinaryComparable> {
我们可以看到Text
是 BinaryComparable
。
那么,我们来考虑
@InterfaceAudience.Public
@InterfaceStability.Stable
public interface WritableComparable<T> extends Writable, Comparable<T> {
我在 Scala 中有一些课程:
trait MyClass[A <: WritableComparable[A]] {
无法创建
MyClass[Text] = new MyClass[Text]()
由于类型不匹配。为什么?毕竟Text
是BinaryComparable
如何解决的呢?
解决方案
您可以尝试再添加一个类型参数
trait MyClass[B >: A, A <: WritableComparable[B]]
val mc: MyClass[BinaryComparable, Text] = new MyClass[BinaryComparable, Text] {}
与此相反,trait MyClass[A <: WritableComparable[_ >: A]]
不会产生illegal cyclic reference
.
或者,您可以将边界定义MyClass
为
trait MyClass[B, A <: B with WritableComparable[B]]
val mc: MyClass[BinaryComparable, Text] = new MyClass[BinaryComparable, Text] {}
您甚至可以B
使用存在类型排除(如@user建议的那样)
trait MyClass[A <: B with WritableComparable[B] forSome { type B }]
val mc: MyClass[Text] = new MyClass[Text] {}
这样的存在类型将在 Scala 3 中被弃用
http://dotty.epfl.ch/docs/reference/dropped-features/existential-types.html
推荐阅读
- javascript - 数组反转函数JS
- android - Android Jet Pack Navigation,setupWithNavController() 重新创建片段
- java - Android/Java:内存增加2小时,然后稳定。这是正常行为吗?
- javascript - Wordpress 中的 Jquery 无法用于查找切换
- python - Beautifulsoup - 获取不在特定标签之间的文本(之后但之前
)? - python-3.x - python中的两个列表计数
- xml - XSL BI Publisher For-Each 循环打印空行
- database - 存储许多小整数的有效解决方案
- c++ - contiki C++编译导致zoul区域“FLASH_CCA”溢出
- python - PyRFC:通过 mshost 连接(不是 ashost)