无法从静态上下文中引用非静态方法报错问题

报错信息如下:

错误原因是:

在Java中,当你尝试在静态上下文中调用非静态方法时,会遇到编译错误。错误信息 Non-static method 'selectById(java.io.Serializable)' cannot be referenced from a static context 就是在告诉你,你正在尝试从一个静态环境中访问一个非静态方法。

而上下文中错误的代码是这部分:

在MyBatis Plus框架中,selectById 方法通常定义在一个接口中,如 BaseMapper<T> 接口,这个接口被继承或实现到具体的 Mapper 接口中。BaseMapper<T> 中的 selectById 方法是一个非静态方法,它需要实例化的 Mapper 对象来调用。
如果你在静态方法或静态初始化块中尝试调用 selectById 方法,那么你需要确保你有一个指向具体 Mapper 实例的引用。这通常意味着你需要通过Spring的依赖注入机制获取这个实例。

所以最后错误的原因是因为没有将Mapper对象实例化正确注入到服务类中。regionMapper 是一个非静态的成员变量,它通过Spring的@Autowired注解被自动注入。这样,就可以在非静态方法中安全地调用 selectById 方法了。

关于静态非静态的原理:

静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以会报错。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值