【发布时间】:2013-07-27 12:43:50
【问题描述】:
Groovy 的用户指南上有一个例子:
@Category(Vehicle) class FlyingAbility {
def fly() { "I'm the ${name} and I fly!" }
}
@Category(Vehicle) class DivingAbility {
def dive() { "I'm the ${name} and I dive!" }
}
interface Vehicle {
String getName()
}
@Mixin(DivingAbility)
class Submarine implements Vehicle {
String getName() { "Yellow Submarine" }
}
@Mixin(FlyingAbility)
class Plane implements Vehicle {
String getName() { "Concorde" }
}
@Mixin([DivingAbility, FlyingAbility])
class JamesBondVehicle implements Vehicle {
String getName() { "James Bond's vehicle" }
}
如果我有JamesBondVehicle 的实例:
def vehicle = new JamesBondVechile()
如何检查vehicle 是否有飞行能力?特别是在我不知道车辆是如何创建的情况下。
以下不起作用:
assert vehicle instanceof FlyingAbility
以下作品:
assert vehicle.respondsTo('fly')
但这不是检查 mixin 存在的通用方法,例如如果我有 2 个看起来完全一样的 mixin,但实现的东西不同呢?
【问题讨论】: