我想在Scala中创建并使用Seq [T]集合
并确保它只使用一种类型。所以,如果我使用:
val l = Lisr(1, 2, 2.0)
应该发生编译时错误 - 列表应该全部
双打或全部。
TIA
答案 0 :(得分:0)
考虑-Xlint:infer-any
编译器flag
警告将类型实参推断为
Any
结合致命警告,至少可以防止推断出Any
的最坏情况LUB情况
scala -Xlint:infer-any -Werror -e 'List(42, 3.14, "picard")'
warning: a type was inferred to be `Any`; this may indicate a programming error.
List(42, 3.14, "picard")
^
error: No warnings can be incurred under -Werror.
但是请注意,例如,如果LUB小于Any
,这将无济于事
scala -Xlint:infer-any -Werror -e 'Vector(List(1), Set(2))'
不提出警告。另一个可能有用的标志是-Wnumeric-widen
扩大数字时发出警告。
例如
scala -Wnumeric-widen -Xlint:infer-any -Werror -e 'def f(i: Int, d: Double): List[Double] = List(i, d)'
warning: implicit numeric widening
def f(i: Int, d: Double): List[Double] = List(i, d)
^
error: No warnings can be incurred under -Werror.