Groovy中如何在类内部调用外部方法LOG.error?
解决Groovy类内调用外部LOG.error方法的问题
嘿,作为Groovy新手碰到这种“方法不属于当前类”的报错太正常啦!咱们分几种常见情况来解决这个问题:
情况1:LOG是脚本级别的日志实例
如果你是在Groovy脚本里定义了LOG,然后在脚本内部的类里想调用它,因为类的作用域和脚本本身是分开的,直接调用会找不到。这时候可以把LOG作为构造参数传入类:
// 脚本里的代码 def LOG = LoggerFactory.getLogger(this.class) class MyClass { def log // 声明成员变量存储日志实例 // 构造方法接收外部传入的LOG MyClass(def logInstance) { this.log = logInstance } def doSomeWork() { log.error("这里出错啦!") // 现在就能正常调用了 } } // 创建类实例时把LOG传进去 def myObj = new MyClass(LOG) myObj.doSomeWork()
情况2:LOG是工具类的静态方法
如果LOG.error是某个日志工具类的静态方法,那你需要先导入对应的工具类,然后用类名.方法名的方式调用:
// 先导入你的日志工具类(假设全类名是com.yourpackage.LogUtils) import com.yourpackage.LogUtils class MyClass { def doSomeWork() { LogUtils.error("这里出错啦!") // 直接通过类名调用静态方法 } }
情况3:更规范的推荐做法
其实在Groovy类里使用日志,最规范的方式是在类内部自己声明日志实例,避免依赖外部变量,比如用SLF4J(大部分项目的标配):
import org.slf4j.Logger import org.slf4j.LoggerFactory class MyClass { // 在类内部声明自己的日志实例 private static final Logger LOG = LoggerFactory.getLogger(MyClass.class) def doSomeWork() { LOG.error("这里出错啦!") // 直接调用,完全没有作用域问题 } }
这种方式符合面向对象的封装原则,也不会出现找不到方法的问题,推荐优先使用哦!
内容的提问来源于stack exchange,提问作者OpenStove
相关产品推荐
相关产品推荐

