gpt4 book ai didi

scala - 要求用户在 Scala 的方法中提供 [Type]?

转载 作者:行者123 更新时间:2023-12-04 19:32:36 26 4
gpt4 key购买 nike

如果我按照以下方式写一些东西:

class A

class B {
def add[T <: A]() = { ... }
}

那么我如何要求用户在调用B.add时提供类型T?这两个调用编译:

class C extends A

class D extends A {
val b = new B
b.add() // 1.
b.add[C]() // 2.
}

我希望 1. 生成编译时错误,而不是默认为 b.add[D]()

这可能吗?

最佳答案

您可以使用来自 this answer=!= 证据强制执行 AT 之间的区别,如下所示:

def add[T <: AnyRef](implicit e: T =!= AnyRef) = null.asInstanceOf[T]

scala> add
<console>:10: error: ambiguous implicit values:
both method equal in trait LowerPriorityImplicits of type [A]=> =!=[A,A]
and method nequal in object =!= of type [A, B](implicit same: =:=[A,B])=!=[A,B]
match expected type =!=[T,AnyRef]
add
^

scala> add[String]
res1: String = null

关于scala - 要求用户在 Scala 的方法中提供 [Type]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com