Serializable
유형에 확장 메서드를 추가하려고하는데 클래스를 이해하는 데 구멍이있는 것 같습니다. 여기에 내가 할 노력하고있어의 기초의 조각입니다 :암시 적 변환을 사용하는 일반 Serializable 확장
class YesSer extends Serializable
class NoSer
implicit class SerOps[S <: Serializable](s: S) {
def isSer(msg: String) = {
println(msg)
assert(s.isInstanceOf[Serializable])
}
}
val n = new NoSer
val ln = List(new NoSer, new NoSer)
val y = new YesSer
val ly = List(new YesSer, new YesSer)
// n.isSer("non Serializable")
ln.isSer("list of non Serializable")
y.isSer("Serializable")
ly.isSer("list of Serializable")
List
이 확장은 Serializable
그것은 라인 n.isSer
가 컴파일되지 않습니다 나에게 분명하지만, 그것은 또한 그 ln.isSer
또한 shouldn 보인다 그것의 "내부"유형이 NoSer이기 때문에 컴파일되지 않습니다. ln
의 내부 유형의 Serializeable
에 어떤 종류의 강요가 있습니까? 절대적으로 무언가를하려고 노력하고 있습니까?
암시 적 변환은 serializables 컬렉션 만 가져올 수 있지만 y.isSer ("Serializable") 유스 케이스는 컴파일되지 않으며 모호한 변환기가되므로 암시 적 변환기를 사용할 수 없습니다 암시 적으로 컴파일러가 거부합니다. – jwvh
또한 이것으로 expeerimented하고 동시에 범위에서 여러 암시 적 def 변환을 가질 수있었습니다. '암시 적 def serToSerOPs [S <: Serializable] (s : S) = 새 SerOps (s)' 암시 적 def serToSerOPsC [C [_] : : Serializable, S <: Serializable> (c : C [S]) : 새로운 SerOps () 암시 적 def serToSerOPsCS [) = new SerOps (c)' –