问题标签 [type-bounds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - java中多个类的泛型类型
如何实现将一个类的泛型类型绑定到多个类?一个例子是 Number 和 Boolean 的子类。
scala - 为什么我收到“类型参数...不符合特征...”编译器错误?
我现在在 IntelliJ (14.1.5) 中遇到 Scala (2.11.7) 编译器错误已经好几个小时了。我在 Google 上搜索过,绞尽脑汁并尝试了很多变化,但似乎无法绕过它。
我已经获取了代码上下文并尽可能地将其剪裁得尽可能小(包括剪裁任何外部库依赖项)以捕获我一直用来尝试缩小问题范围的域。我以为我使用的是非常简单的惯用 Scala;案例对象,带有类型参数的特征等。
从最后一行开始的第四行abstract case class CoordinateRadian
是产生这个 Scala 编译器错误的那个:
错误:(128, 129) 类型参数 [Test.this.CoordinateRadian.unitBase.type,Test.this.LongitudeRadian,Test.this.LatitudeRadian] 不符合特征坐标的类型参数边界 [U <: Test.this.Angle .UnitBase.Member,+O <: Test.this.Longitude[U],+A <: Test.this.Latitude[U]] 抽象案例类 CoordinateRadian private[CoordinateRadian] (longitude: LongitudeRadian, latitude: LatitudeRadian) extends Coordinate [CoordinateRadian.unitBase.type, LongitudeRadian, LatitudeRadian] {
这是编译器错误的代码:
您会注意到文件末尾的第五行是注释掉的行(与文件末尾的第四行非常相似)。如果取消注释最后一行的第五个,然后注释掉最后一行的第四个并编译代码(IntelliJ 中的“Build All”),将发出两个错误:
错误:(125, 67) 在 trait Coordinate of type => Test.this.Longitude[Test.this.CoordinateRadian.unitBase.type] 中覆盖方法经度;值经度具有不兼容的类型抽象案例类 CoordinateRadian private[CoordinateRadian] (longitude: LongitudeRadian, latitude: LatitudeRadian) extends Coordinate[CoordinateRadian.unitBase.type, Longitude[CoordinateRadian.unitBase.type], Latitude[CoordinateRadian.unitBase.type]] {
错误:(125, 95) 在 trait Coordinate of type => Test.this.Latitude[Test.this.CoordinateRadian.unitBase.type] 中覆盖方法纬度;值 latitude 具有不兼容的类型 abstract case class CoordinateRadian private[CoordinateRadian] (longitude: LongitudeRadian, latitude: LatitudeRadian) extends Coordinate[CoordinateRadian.unitBase.type, Longitude[CoordinateRadian.unitBase.type], Latitude[CoordinateRadian.unitBase.type]] {
我可能只是在这方面工作了太久,现在眼睛有黄疸。我在一个多小时内没有想到任何新的方法来解决这个问题。所以,任何关于我做错了什么的指导都将不胜感激。
scala - Scala泛型:为什么具有相同上限的两种类型不兼容?
我对 Scala 泛型中边界的工作方式感到困惑。考虑以下:
这给了我一个错误:
在我幼稚的理解中,两者都是ReturnType
和B
的子类型,MessageBody
因此必须兼容。那么为什么它们不兼容,我应该如何编写代码以使它们兼容?
编辑:下面的代码工作得很好,如果我在任何地方混合MessageKey
和MessageBody
实例之间的关系,我会得到一个很好的编译时错误。
编辑:显然,没有办法编译检查这个:handler.messageHandler(Key3)
这将导致在MatchError
运行时。
java - Java 类型擦除和多重边界
我知道在 Java 泛型中,当使用具有多个边界的类型参数时,编译器会将类型信息擦除到“最左边的边界”(即列表中的第一个类/枚举或接口)。那么为什么下面的代码编译没有问题呢?
类型参数 T 不应该被视为 Object 吗?(因此不允许我调用 close() 或 append())??
scala - 为什么类型参数绑定的方法>:允许子类型?
考虑以下 Scala 中堆栈的简单实现:
现在假设我们要向push
. Stack
天真的尝试
失败是因为A
in(x: A)
是一个逆变位置。在Scala by Example第 58 页中,作者建议
这里绑定的类型是指给定一个特定类型的栈,我们可以将相同或更通用类型的对象压入该栈,结果是更通用类型的栈。
例如,
我认为这种选择的重点在于它真正保持了 的协方差Stack
:如果一段代码期望 aStack[Fruit]
将任何水果(香蕉或苹果)推到其上,那么它仍然可以将这些水果推到 a 上Stack[Apple]
。
令人惊讶的是,我们还可以推送子类型:
为什么允许这样做?类型绑定不是>:
意味着只允许超类型吗?
scala - Scala 抽象类型成员 - 继承和类型界限
今天我在 Scala 中遇到了一些奇怪的情况,当时我试图改进抽象类型成员的类型边界。
我有两个特征定义类型成员的边界并将它们组合在一个具体的类中。这很好用,但是当与特征组合匹配/转换时,只有两个 TypeBounds 之一是“活动的”,我很难理解为什么......
我试图准备一个例子:
现在,如果我将这两个特征结合在一个具体的类中
我可以按预期通过 get 访问我的会员
但是如果我转换为(左与右)或模式匹配,我将无法再访问该成员。根据顺序,我可以从左或右获得类型边界,但不是两者的组合。
我知道 Left with Right 与 Right with Left 不同,但在这两种情况下,两种类型的界限都包括在内,那么为什么我只能让一个工作呢?
谁能解释为什么会这样?
java - 类型参数边界 - 未经检查的覆盖:返回类型需要未经检查的转换
如何摆脱Unchecked overriding: return type requires unchecked conversion. Found 'org.example.AAndB<java.lang.integer>', required 'T'.
以下代码中的警告。
我尝试设计一个接口 ( Interface
),使其不会显式声明方法的返回类型get()
( AAndB<Integer>
),而是枚举结果必须实现的接口 ( <T extends B<Integer> & A> T
)。
oop - 多态父派生类型
我正在尝试设置一个父类型geom
具有可分配字段的 Fortran OOP 代码shape
。该字段分配有扩展类型之一,其扩展类型为geom
acircle
或 arectangle
类型。在另一个模块中,我有一个body
类型,其中包含一个geom
字段。
所以基本上我想要一个geom
可以实际访问不同类型的类型(然后将根据类型访问不同的字段)和一个body
用几何初始化的类型。
找到下面的代码。这是几何的模块:
这是身体的模块:
这就是我从主文件初始化它们的方式:
但是,使用 gfortran 4.8.4 编译时出现此错误。
scala - 如何匹配没有特定类型类实例的类型?
我想为那些没有特定类型类实例的类型定义一些行为:
我们可以处理类型类中的差异,但是我需要创建额外的实例来支持一些通用行为。
有没有办法否定类型绑定?一种通过!:
编译来制作函数的方法?
(我想在香草Scala中做到这一点,没有scalaz,无形等)
scala - 什么特定的用例应该使用 =:= 运算符而不是上下文绑定,为什么?
在下面的代码中(在另一个答案中提到,但引出了一个单独的问题),一个所谓的证据参数用于向编译器指示 A 参数是通过上下文绑定的字符串类型。
但是,为什么不简单地定义没有类型参数的类呢? 我的意思是,如果您参数化正在使用的类型,那么您需要一个泛型类;否则,为什么不直接省略类型参数,如下所示?
上下文绑定带来优势的例子是什么?