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

Lambda表达式返回类型错误:void无法转换为int问题求助

解决Lambda表达式返回类型不匹配的问题

嘿,我来帮你搞定这个报错!你遇到的bad return type in lambda expressions void cannot be converted to int错误,根源其实很明确:

你的LeapYears接口里定义的leapYear方法要求返回int类型,但你在Lambda表达式里写的return System.out.println(...),而System.out.println()本身是个void方法(没有返回值),这就导致编译器找不到可以转换成int的返回值,直接报错了。

另外你的代码还有个小问题:把用户输入的逻辑放在了Lambda里,这样Lambda就同时承担了“获取输入”和“判断闰年”两个职责,有点违背单一职责原则,也不利于代码复用。

下面给你修正后的代码,我调整了几个关键点:

import java.util.Scanner;

// 调整接口方法:返回boolean更符合判断闰年的逻辑,方法名也更直观
interface LeapYears {
    boolean isLeapYear(int year);
}

public class LeapYear {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 把输入逻辑移到main方法里,和判断逻辑分离
        System.out.print("Year between 2012 and 2060: ");
        int inputYear = in.nextInt();

        // Lambda只专注于判断闰年的核心逻辑,返回boolean类型,和接口方法匹配
        LeapYears leapChecker = (yearToCheck) -> {
            boolean divisibleBy4 = yearToCheck % 4 == 0;
            boolean notDivisibleBy100 = yearToCheck % 100 != 0;
            boolean divisibleBy400 = yearToCheck % 400 == 0;
            return (divisibleBy4 && notDivisibleBy100) || divisibleBy400;
        };

        // 根据Lambda的判断结果输出信息
        if (leapChecker.isLeapYear(inputYear)) {
            System.out.println(inputYear + " is a leap year");
        } else {
            System.out.println(inputYear + " is not a leap year");
        }

        in.close(); // 记得关闭Scanner资源
    }
}

如果坚持要让接口返回int(比如用1表示闰年,0表示非闰年),也可以这样修改Lambda部分:

// 保持接口原定义
interface LeapYears {
    int leapYear(int years);
}

// Lambda部分改成:
LeapYears leapChecker = (yearToCheck) -> {
    boolean divisibleBy4 = yearToCheck % 4 == 0;
    boolean notDivisibleBy100 = yearToCheck % 100 != 0;
    boolean divisibleBy400 = yearToCheck % 400 == 0;
    boolean isLeap = (divisibleBy4 && notDivisibleBy100) || divisibleBy400;
    // 返回1或0,匹配int类型的要求
    return isLeap ? 1 : 0;
};

// 然后main里根据返回值判断:
int result = leapChecker.leapYear(inputYear);
if (result == 1) {
    System.out.println(inputYear + " is a leap year");
} else {
    System.out.println(inputYear + " is not a leap year");
}

核心记住:Lambda表达式的返回值类型必须和接口中抽象方法的返回类型完全一致,不能用void去匹配int这种数值类型哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:39