def merge[X](list1: Option[List[X]], list2: Option[List[X]]): Option[List[X]]
def merge[X](list1: Option[List[X]], elem: Option[X]): Option[List[X]]
編譯器說這兩個函式在擦除后具有相同的型別
def merge[X](list1: Option[List[X]],list2: Option[List[X]]): Option[List[X]] at line 122 and
def merge[X](list1: Option[List[X]],elem: Option[X]): Option[List[X]] at line 131
have same type after erasure: (list1: Option, list2: Option)Option
為什么擦除后Option[List[X]]和Option[X]變得相同?我怎樣才能讓它們與眾不同?
uj5u.com熱心網友回復:
- 為什么擦除后
Option[List[X]]和Option[X]變得相同?
事業的泛型型別引數Option[...]被擦除(這樣既X和List[X]被洗掉),因此這兩種方法都具有相同的簽名。
- 我怎樣才能讓它們與眾不同?
一種方法 - 將虛擬隱式引數添加到其中一種方法中,以便它們具有不同的簽名:
def merge[X](list1: Option[List[X]], list2: Option[List[X]]): String = "1"
def merge[X](list1: Option[List[X]], elem: Option[X])(implicit d: DummyImplicit): String = "2"
println(merge(Some(List(1)), Some(List(2)))) // 1
println(merge(Some(List(1)), Some(2))) // 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/406607.html
標籤:
