我正在写我自己的简单 javax.sql.DataSource
实现,我需要工作的唯一方法是getConnection: Connection
,但接口(interface)继承了许多其他方法(我不需要)来自javax.sql.CommonDataSource
和 java.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/