Scala 设置“";“双”字;泛型参数的限制

Scala 设置“";“双”字;泛型参数的限制,scala,Scala,我有三门课: abstract class Abs1 { ... } abstract class Abs2 { ... } class MyClass[T <: /*Abs1 or Abs2*/] { ... } 抽象类Abs1{…} 抽象类Abs2{…} 类别MyClass[T简言之:否 对于类型为T的对象,这意味着什么?您可以调用什么方法,因为您不知道它是否在Abs1中公开了任何方法(因为它可能是从Abs2派生的类型)或在Abs2中公开的任何方法(因为它可能是从Abs1派生的类型

我有三门课:

abstract class Abs1 { ... }
abstract class Abs2 { ... }

class MyClass[T <: /*Abs1 or Abs2*/] { ... }
抽象类Abs1{…}
抽象类Abs2{…}
类别MyClass[T简言之:否

对于类型为
T
的对象,这意味着什么?您可以调用什么方法,因为您不知道它是否在
Abs1
中公开了任何方法(因为它可能是从
Abs2
派生的类型)或在
Abs2
中公开的任何方法(因为它可能是从
Abs1
派生的类型)。您只能使用为
Any
Abs1
Abs2
的任何其他公共父级定义的方法(如果它们有)

在这种情况下,您最好直接接受这个超级类型,并操作
Any
(或
Abs1
Abs2
的公共父类型)方法中的对象,而不是
T
类型的对象。或者您不能对
T
施加任何约束:这将为您提供一个泛型类,您可以使用任何特定类型进行实例化,但您也不会知道关于此类型的任何信息,除非它派生自
any

参见此答案