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,但只是以不同的方式实现东西怎么办?