You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:52:37