scala - 是否可以在 Scala 中指定对泛型类型 τ 的约束,使得 τ < : σ ∧ τ ≠ σ?

标签 scala generics types

我有一个类型:

class σ

现在我想定义一个类型:
class υ[τ <: σ]

附加要求 τ ≠ σ。

这可能吗?

最佳答案

使用 Miles Sabin 的回答 here :

trait =!=[A, B]

implicit def neq[A, B] : A =!= B = null
implicit def neqAmbig1[A] : A =!= A = null
implicit def neqAmbig2[A] : A =!= A = null

然后 :
scala> class A
defined class A

scala> class B[C <: A](implicit ev: C =!= A)
defined class B

scala> class D extends A
defined class D

scala> new B[D]()       // OK, D is a subtype of A
res4: B[D] = B@4d8c463c


scala> new B[A]()       // Error, A =:= A
<console>:15: error: ambiguous implicit values:
   both method neqAmbig1 of type [A]=> =!=[A,A]
   and method neqAmbig2 of type [A]=> =!=[A,A]
   match expected type =!=[A,A]

scala> class E
defined class E

scala> new B[E]()       // Error, E is not a subtype of A
<console>:15: error: type arguments [E] do not conform to class B's type parameter bounds [C <: A]

关于scala - 是否可以在 Scala 中指定对泛型类型 τ 的约束,使得 τ < : σ ∧ τ ≠ σ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859909/

相关文章:

c++ - 比较vtk数据类型和基本数据类型

go - 如何检查值是否为 float

c - 如何在 GO 中将 "_Ctype_int"更改为 "int"?

scala - 强制执行严格的收集

java - 是否有理由使用 Scala 的 StringLike.replaceAllLiterally 而不是 Java 的 String.replace?

scala - SqlContext 不是包 org.apache.spark.sql 的成员

java - Java 泛型、集合接口(interface)和对象类的问题

Java泛型、继承和内部静态类编译问题

mysql - scala 系统调用 mysql 失败

java - 为什么不是原始类型,泛型类中的静态变量?