我有3个班级:
abstract class Abs1 { ... }
abstract class Abs2 { ... }
class MyClass[T <: /*Abs1 or Abs2*/] { ... }
是否有任何方式指明T
必须是Abs1
或 Abs2
的孩子?
答案 0 :(得分:2)
简而言之:不。
对T
类型的对象意味着什么?您可以调用哪种方法,因为您不知道它是否在Abs1
中公开了任何方法(因为它可能是从Abs2
派生的类型)或{{1}中公开的任何方法(因为它可能是从Abs2
派生的类型)。您只能使用为Abs1
或Any
和Abs1
的任何其他常见父项定义的方法,如果它们有一些。
在这种情况下,您也可以直接接受此超级类型,并在方法中操作Abs2
(或常见父类型的Any
和Abs1
)对象而不是对象类型为Abs2
。或者你不能对T
施加任何约束:这会给你一个可以用任何特定类型实例化的泛型类,但你不会知道任何关于这种类型的东西,除了它派生自T