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

Spring中将对象列表转为DTO列表报错:非静态方法无法从静态上下文引用

解决Non-static method cannot be referenced from a static context错误

错误原因

你在RaceService的getRaces方法中使用了RaceDtoMapper::map的方法引用,但RaceDtoMapper类中的map是非静态方法,不能直接通过类名调用,必须通过类的实例来执行。

解决方案

方案一(推荐):使用注入的实例方法引用

既然RaceDtoMapper已经通过构造函数注入到RaceService中,直接使用该实例的方法引用即可:

List<RaceDto> getRaces(){
    return raceRepository.findAll()
            .stream()
            .map(raceDtoMapper::map) // 替换为注入的实例引用
            .toList();
}

这种方式符合Spring依赖注入的设计规范,后续如果RaceDtoMapper需要注入其他依赖,也能正常工作。

方案二:将map方法改为静态方法

如果不需要RaceDtoMapper作为Spring管理的Bean,可以把map方法改为静态方法:

@Service
public class RaceDtoMapper {
    public static RaceDto map(Race race){ // 添加static修饰符
        RaceDto dto = new RaceDto();
        dto.setId(race.getId());
        dto.setMaxPlayers(race.getMaxPlayers());
        dto.setDescription(race.getDescription());
        dto.setLocation(race.getLocation());
        dto.setDate(race.getDate());
        dto.setState(race.getState());
        dto.setRaceEventId(race.getRaceEvent().getId());
        return dto;
    }
}

但不推荐这种方式,因为RaceDtoMapper被标记为@Service,本身是要被Spring管理的实例Bean,静态方法会破坏这种设计。

内容的提问来源于stack exchange,提问作者Ser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:52:14