Scala中以下泛型定义之间有何不同:
class Foo[T <: List[_]]
Run Code Online (Sandbox Code Playgroud)
和
class Bar[T <: List[Any]]
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我他们差不多,但后者更明确.我发现前者编译的情况,但后者不编,但不能指出确切的区别.
谢谢!
编辑:
我可以把另一个扔进去吗?
class Baz[T <: List[_ <: Any]]
Run Code Online (Sandbox Code Playgroud) 我有以下代码行:
case set: Set[Any] => setFormat[Any].write(set)
Run Code Online (Sandbox Code Playgroud)
但是,编译器会发出警告:
非变量类型参数类型模式中的任何类型scala.collection.Set [Any]未选中,因为它被擦除消除[warn]
很公平.
所以我改变了我的路线:
case set: Set[_] => setFormat[Any].write(set)
Run Code Online (Sandbox Code Playgroud)
现在我收到一个错误:
[错误]发现:scala.collection.Set [_]
[error] required:scala.collection.Set [Any]
Q1.这两者有什么区别?
然后我将我的代码更改为以下内容:
case set: Set[_] => setFormat[Any].write(set.map(s => s))
Run Code Online (Sandbox Code Playgroud)
现在很高兴没有任何错误或警告.
Q2.这为什么有用?