泛型 – Scala中集合中的通用类型类
发布时间:2020-12-16 08:47:53 所属栏目:安全 来源:网络整理
导读:我在使用 Scala创建的泛型类时遇到问题.我有以下课程: class Channel[T,U](val endPoint : EventSource[U],val filter : Occurrence[T] = Boolean,val map : Occurrence[T] = Occurrence[U]) { def send(occurrence : Occurrence[T]) { if (filter(occurren
我在使用
Scala创建的泛型类时遇到问题.我有以下课程:
class Channel[T,U](val endPoint : EventSource[U],val filter : Occurrence[T] => Boolean,val map : Occurrence[T] => Occurrence[U]) { def send(occurrence : Occurrence[T]) { if (filter(occurrence)) { endPoint.occur(map(occurrence)) } } } 这里,Channel [T,U]可以看作是将事件[T]从EventSource [T]传播到EventSource [U]的一种方式.仅当过滤器函数为真时才发送该事件,如果是,则将该事件传递给map并发送该结果. 这个类似乎编译和正常运行.我的问题是我想将几个Channel附加到EventSource [T]实例,因此它可以将Occurrences传播到几个不同类型的不同EventSource.我的困惑基本上是如何做到这一点: class EventSource[T] { var List[Channel[T,U]] list = ... } 你在这是什么? T简单地从列表所属的EventSource中的类型T引用(是其成员). 对不起,如果这是一个模糊或混乱! 编辑:我应该注意到我也希望能够在以下列表中附加到此列表: list = list ++ List[Channel[T,U](new Channel[T,U](endPoint,filter,map)) 是追加真正的问题吗? 解决方法
要保持打字,你真的需要使用通配符_类型.这允许您以这样的方式定义列表,即在将列表添加到列表时关注Channel类型的U参数,而不是在将事件发送到列表中的所有通道时.以下编译,但现在它是相当圆形的.你需要一个子类的通道,除了将它发送到另一个EventSource之外.
class Occurrence[T] class Channel[T,val map : Occurrence[T] => Occurrence[U]) { def send(occurrence : Occurrence[T]) { if (filter(occurrence)) endPoint.occur(map(occurrence)) } } class EventSource[T] { var list: List[Channel[T,_]] = Nil def addChannel[U]( endPoint : EventSource[U],filter : Occurrence[T] => Boolean,map : Occurrence[T] => Occurrence[U]) { list = list ++ List[Channel[T,U]](new Channel[T,map)) } def occur( occurrence : Occurrence[T] ) { list foreach { _.send( occurrence ) } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |