我有两个对象,ObjectA和ObjectB,都与一个方法update()。我想写一个接受ObjectA或ObjectB(但没有其他类型)的函数。从概念上讲,这就是我想要做的事:接受多种类型的参数在斯卡拉
def doSomething[T <: ObjectA | T <: ObjectB](obj: T) = {
obj.update
}
我知道有其他的方法来解决这个问题(例如,update()方法的结构类型,公共基类等),但我的问题是有可能在Scala中这样做,如果是这样的话,语法是什么?这叫做什么?
你会怎样想到这个工作?如果编译器不知道它是什么类型,那么编译器会知道'T'有什么方法?如果你的意思是确保你的班级有'update',那么这就是结构类型的用途。 – dhg 2012-03-08 00:09:23
可能的重复[是否Scala有“类型分离”(联合类型)?](http://stackoverflow.com/questions/3508077/does-scala-have-type-disjunction-union-types)。接受的答案和下一个排名最高的指向我的unboxed union编码直接解决了这个问题。 – 2012-03-08 00:28:10
@dhg,如果ObjectA和ObjectB都有一个方法update(),并且type T扩展了这些类中的一个,它可以知道类型T有一个update()方法。 – 2012-03-08 06:28:19