Groovy类内用@BaseScript报错,如何实现接口并复用基脚本?
Groovy实现接口并复用BaseScript方法与数据的解决方案
问题背景
有Java开发背景,尝试用Groovy创建遵循Calculator接口的类,同时复用rules.risk.BaseScript中的公共方法与数据,但使用@BaseScript注解时触发错误:
Annotation @BaseScript can only be used within a script
原代码示例:
import groovy.transform.BaseScript @BaseScript(rules.risk.BaseScript) // 报错行 import org.pysz.safebicycle.model.Calculator class Cat extends Script implements Calculator { @Override Object run() { return null } @Override public int add() { return 4; } @Override public int multiply() { return 5; } }
解决方案
方案一:脚本形式实现接口并复用BaseScript
@BaseScript注解仅支持在Groovy脚本中使用,因此可以直接将逻辑写在脚本内,同时实现目标接口:
import groovy.transform.BaseScript import org.pysz.safebicycle.model.Calculator // 指定继承的基脚本,复用其方法与数据 @BaseScript(rules.risk.BaseScript) this implements Calculator // 实现Calculator接口的抽象方法 @Override int add() { 4 } @Override int multiply() { 5 } // 自定义脚本运行逻辑,可直接调用BaseScript中的公共方法/数据 def run() { // 示例:调用BaseScript的方法或访问属性 // println commonMethodFromBaseScript() // println sharedDataFromBaseScript null }
方案二:类形式继承BaseScript并实现接口
如果更习惯Java类的写法,可直接让你的类继承BaseScript(而非Script),无需@BaseScript注解即可复用其逻辑,同时实现接口:
import rules.risk.BaseScript import org.pysz.safebicycle.model.Calculator // 直接继承BaseScript复用逻辑,同时实现Calculator接口 class Cat extends BaseScript implements Calculator { @Override Object run() { return null } @Override int add() { 4 } @Override int multiply() { 5 } }
内容的提问来源于stack exchange,提问作者fascynacja
相关产品推荐
相关产品推荐

