我有以下内容:
“ Hashtag”和“关键字” EACH类扩展了特征“数据”
“ HashtagManager”和“ KeywordManager”类的每个扩展特征“ DataManager”
它们具有相同的功能,但它们管理的类型(标签/关键字)不同。
HashtagManager具有一个列表[Hashtag],而KeywordManager具有一个列表[Keyword]
我希望DataManager实现功能findInList(X),其中X是Hashtag或Keyword。
当在HashtagManager / KeywordManager中重写X的类型时,如何在DataManager中以通用方式编写 entire 函数实现?
此外,DataManager如何拥有通用的List [X]变量,在每个子类管理器中重写此变量后,它分别变为List [Hashtag],List [Keyword]?
答案 0 :(得分:2)
我认为你的情况就像
trait Data
class Hashtag extends Data
class Keyword extends Data
trait DataManager {
// need a List[Data]
// need a findInList(x: Data)
}
class HashtagManager extends DataManager
class KeywordManager extends DataManager
如果您希望列表开始为空,则可以...
trait DataManager[T <: Data] {
var l: List[T] = List.empty[T]
def findInList(x: T) = ??? // not sure what you want to find
}
class HashtagManager extends DataManager[Hashtag]
class KeywordManager extends DataManager[Keyword]
如果您想在类实例化时初始化列表,则可以...
trait DataManager[T <: Data] {
var l: List[T]
def findInList(x: T) = ??? // not sure what you want to find
}
class HashtagManager(var l: List[Hashtag]) extends DataManager[Hashtag]
class KeywordManager(var l: List[Keyword]) extends DataManager[Keyword]
关键部分是[T <: Data]
,它使您可以使用类型T
(继承自Data
)定义方法/变量/值。