问题标签 [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.

0 投票
1 回答
95 浏览

scala - 未应用类型参数的类型边界

如何指定未应用的高阶类型参数的边界,以便编译以下内容:

无需向Declr. 请注意,允许解决方案假设Impl' 参数的界限始终 S <: Sys[S]是(即,这是可以进入 的任何类型的界限Declr)。

我想我可以用这样的类型成员编写约束:

但是作为类型参数如何做到这一点(因为重述type Impl非常嘈杂,我希望object X尽可能干净)?

0 投票
3 回答
171 浏览

java - 编译器为什么以及如何对这两个条件进行不同的处理?

以下两个代码示例代表相同的逻辑。检查字符串是否为空,并根据该检查进行分支。第一个示例可以安全编译。第二个产生与 Java 泛型相关的类型不匹配错误。我的问题似乎很简单,但它让我难以理解。为什么编译器会以不同的方式处理这两个语句?我怎样才能更好地理解这里发生了什么?

来自 Eclipse 的编译器错误。

Type mismatch: cannot convert from Set<capture#1-of ? extends Object> to Collection<String>

根据要求,这是 SecurityService 接口的相关部分。

0 投票
2 回答
238 浏览

scala - Clarification needed about Scala variance and type bounds

I have a scala trait defined as follows:

I would like to be able to get an instance of this DAO that would work for both subclasses of Advertisement or the base Advertisement class itself. I am not sure how to achieve the desired effect.

Here is what I tried:

Can anyone help?

0 投票
1 回答
1218 浏览

scala - 是否可以使用 Mockito 和 Specs2 模拟具有视图边界的 Scala 方法?

在使用 Mockito 和 Specs2 模拟对其参数类型具有视图界限的方法时,我遇到了一个问题。简而言之,由于视图绑定转换为方法的额外隐式参数,Mockito 无法将期望描述的调用与模拟接收的实际参数相协调:

例如:

这个输出给出:

...以前有没有人遇到过这个问题,或者遇到过使用 specs2 使用视图边界或隐式参数模拟方法的任何方式?

谢谢,

蒂姆

0 投票
2 回答
451 浏览

scala - 为什么类型推断在这里不起作用?

这个问题出现在我正在编写的模块中,但我制作了一个表现相同行为的最小案例。

问题是编译器设法找出Minimal( Int) 的内部参数,但随后将另一个出现设置TNothing,这显然不匹配apply。这些绝对是相同的T,因为删除第一个参数会使第二个参数抱怨 T 未定义。

是否有一些歧义意味着编译器无法推断第一个参数,或者这是一个错误?我可以优雅地解决这个问题吗?

更多信息:此代码是尝试语法糖的简单示例。原始代码试图使|(a)|的模均值a,其中 a 是一个向量。显然|(a)|比写作好|[Float,Vector3[Float]](a)|,但不幸的是我不能用它unary_|来让这更容易。

实际错误:

推断的类型参数 [Nothing,Minimal[Int]] 不符合方法应用的类型参数边界 [T,X <: Sugar.S[T]]

0 投票
1 回答
219 浏览

scala - Scala 抽象类型边界交叉引用

我有两个抽象类,它们将相互引用。我如何/可以键入绑定类型成员,以便派生 Hex 类的 SideT 成员中的 HexT 类型将始终是派生 Hex 类?所以对于派生类 HexA 保证: HexA#SideT#HexT = HexA

同样,所有派生侧类的 HexT 成员中的 SideT 类型将是派生侧类: SideB#HexT#SideT = SideB

我将 Scala 用于 Eclipse 2.1.0.M1 和 Eclipse 3.7.2 所有类都在单独的文件中。以下编译正常,但不能保证我想要什么:

但以下内容不会在派生实现中编译:

它是否正确?这应该编译吗?

0 投票
1 回答
896 浏览

scala - Scala:是否可以将类型参数限制为非抽象的?

Scala:是否可以将类型参数限制为非抽象的?

除了类型参数和抽象类型成员的视图边界、上限和下限之外,是否还有其他约束?例如,在我熟悉的 C# 中,您有额外的通用约束:

where T: Class //不确定 T<: AnyRef 是否包含在 Scala 中

其中T:接口

其中 T:结构

where U: T //裸类型约束

where T: new () //这确保了类型参数是非抽象的,并允许在泛型类中实例化该类型的对象。

最后一个特别重要,因为它允许您构造未知类型,但遗憾的是您只能禁止无参数构造函数。

=:= <:< 和 <%< 只能用于方法参数吗?

作为对评论的回应,该问题的直接触发因素是需要“T:new()”约束或某种等效机制。

某些 C# 约束的使用特定于 C# 的需要。例如,人们一直想要的 C# 中没有的一个限制是“T: numericType” 这个问题已经在 Scala 中解决了。我仍然非常了解 Scala 语言,所以除了上述内容之外,我只是想明确说明在 Scala 语法的这个方面哪些工具是可用的,哪些工具不可用,即使我没有确切地知道我可能想如何在 Scala 上下文中使用它们。

我不确定这是否完全相关,但有时编译器(Eclipse 2.1.0.M1 和 Eclipse 3.7.2)似乎不允许我实例化未知元素类型的集合。下面的代码现在似乎编译得很好。所以我想知道规则是什么:

0 投票
1 回答
145 浏览

scala - 绑定对象的字段/方法

如何将对象的字段/方法与类型绑定?

我正在尝试做:

我的编译器说:

我需要地图来接受任何类型的 CRUDableMeta[_]。

在此先感谢,埃塔姆。

0 投票
3 回答
435 浏览

java - 在下面的例子中,“List ”是必要的,还是“List“ 做同样的事?

我明白那个

允许列表是 T(或 T 本身)的任何子类型,并且

仅允许 T 类型的列表。但是,请查看以下方法签名:

以及以下课程:

假设 T 是 ClassB,我想为我的列表传递一个 T (ClassC) 的子类型:

在这种情况下,java如何推断T是ClassB,而不是ClassC?如果它不能推断出 ClassB(实际上推断出 ClassC),那么下面的方法签名(没有“List”)不是等价的吗?

谢谢,杰克

0 投票
5 回答
555 浏览

java - 从抽象类继承泛型类型方法——转换为特定类型

(在 Java 中工作)我有一个抽象类,在整个类中都有泛型类型:

我有另一个类扩展了所述抽象类,声明如下:

此声明工作正常,但在processPage我想做特定的Album事情时,我尽量避免在不需要使用它时进行强制转换。我更喜欢这是方法声明:

但这不符合覆盖processPagefrom的要求ConnectionProcessor。为什么是这样?如何获得所需的行为?我会认为我可以在任何地方都AlbumProcessor插入,但事实并非如此。<Album>ConnectionProcessor<T>