scala - 如何从 Scala 中的泛型函数返回 null?

标签 scala generics null

我正在写我自己的简单 javax.sql.DataSource实现,我需要工作的唯一方法是getConnection: Connection ,但接口(interface)继承了许多其他方法(我不需要)来自javax.sql.CommonDataSourcejava.sql.Wrapper .因此,我想以一种它们实际上不会起作用但在调用时会表现得足够好的方式来“实现”那些不需要的方法。例如我实现 boolean isWrapperFor(Class<?> iface)作为

def isWrapperFor(iface: Class[_]): Boolean = false

我想实现 <T> T unwrap(Class<T> iface)作为
def unwrap[T](iface: Class[T]): T = null

但最后一个不起作用:编译器报告类型不匹配。

使用 null.asInstanceOf[T] 是否正确或者,还有更好的方法?当然我考虑只是扔UnsupportedOperationException相反,在这种特殊情况下,但恕我直言,这个问题仍然很有趣。

最佳答案

这是因为 T可能是不可为空的类型。它在你强制执行 T 时有效成为可空类型:

def unwrap[T >: Null](iface: Class[T]): T = null

unwrap(classOf[String]) // compiles

unwrap(classOf[Int]) // does not compile, because Int is not nullable

关于scala - 如何从 Scala 中的泛型函数返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065962/

相关文章:

python - 基于 Spark 中的另一个 RDD 进行过滤

java - xyz 不在类型变量 T 的范围内

php - 当我使用带有常量值的 bindParam 时,为什么出现 Cannot pass parameter 2 by reference 错误?

scala - Scala 中的延迟 val 定义

用于访问内联和链选项属性的 Scala 语法 "OrElse"?

java - 构造期间未知泛型的安全方法返回类型

java - null 是一个对象吗?

MySQL:获取日期为 NULL 的行,或者如果存在则获取具有设置日期的行

scala - 无法从 JAR 文件构建程序

Java:如何避免 "method not applicable for the arguments"错误