【发布时间】:2015-12-15 03:09:13
【问题描述】:
我正试图找出一种方法来摆脱重载的方法。目前我正在使用这种方法为用户提供漂亮的 API:
def get(id: String): Option[JsonDocument]
def get(id: String, timeout: Duration): Option[JsonDocument]
def get[D <: Document[_]](id: String, target: Class[D]): Option[D]
def get[D <: Document[_]](id: String, target: Class[D], timeout: Duration): Option[D]
现在由于 scala 具有默认参数,我想将其浓缩为一种方法。但是因为 D 是通用的,如果没有提供,我需要默认值不是“Nothing”,而是“JsonDocument”。
我目前的做法是这样的:
def get[D <: Document[_]](id: String, target: Class[D] = classOf[JsonDocument], timeout: Duration = null): Option[D]
事实证明编译器对此非常满意,但 IDE 存在问题。如果没有明确提供目标(如 target = JsonDocument 或任何其他),它认为返回类型是 Option[Nothing],因此它会让用户感到困惑。
所以我的问题是:对于这些类型,如果用户没有提供要覆盖的 JsonDocument 类型,是否可以为类型 D 提供“默认”类型?
【问题讨论】:
-
您正在使用/谈论哪个 IDE?
-
@Maxim 我看不出引用的问题是如何重复的。他们确实谈论了类似的事情,但我似乎很清楚这两个问题会有不同的解决方案。