Groovy
原创2022/4/1...小于 1 分钟
Groovy
扩展类
:::: code-group
::: code-group-item org.codehaus.groovy.runtime.ExtensionModule:active
# resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
moduleName=pirate-module
moduleVersion=1.0
extensionClasses=fyi.ori.test.ExTestC1,fyi.ori.test.ExTestC3
staticExtensionClasses=fyi.ori.test.ExTestC2:::
::: code-group-item ExTestC2.java
class ExTestC2 {
static void exMethod2(TestC1 self) {
System.println("exMethod2")
}
}:::
::: code-group-item ExTestC3.java
class ExTestC3 {
static void exMethod1(TestC1 self) {
System.println("exMethod3")
}
}:::
::::
mixin
@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" }
}
assert new Plane().fly() ==
"I'm the Concorde and I fly!"
assert new Submarine().dive() ==
"I'm the Yellow Submarine and I dive!"
assert new JamesBondVehicle().fly() ==
"I'm the James Bond's vehicle and I fly!"
assert new JamesBondVehicle().dive() ==
"I'm the James Bond's vehicle and I dive!"