Java 为什么这段代码会在*和+;接线员?

Java 为什么这段代码会在*和+;接线员?,java,function,lambda,Java,Function,Lambda,为什么这段代码在*和+运算符上抛出invalidAssignmentOperator错误 public static Function<Integer, Double> tariff = t -> { if (t = 500) { t * t; } else { t + t; } }; 公共静态功能电价=t->{ 如果(t=500){ t*t; }否则{ t+t; } }; 使用括号{}需要return关键字 原始类

为什么这段代码在*和+运算符上抛出invalidAssignmentOperator错误

public static Function<Integer, Double> tariff = t -> {
    if (t = 500) {
        t * t;
    } else {
        t + t; 
    }
};
公共静态功能电价=t->{
如果(t=500){
t*t;
}否则{
t+t;
}
};
  • 使用括号
    {}
    需要
    return
    关键字
  • 原始类型比较是使用
    =
    而不是
    =
  • 当您要求将
    Double
    作为输出时,您需要强制转换
    (Double)
    ,因为
    int*int>int
    (与
    +
    相同)或使用
    函数
功能电价=t->{
如果(t==500){
返回(双)t*t;
}否则{
返回(双)t+t;
}
};

要简化,您可以执行以下操作:

Function<Integer, Double> tariff = t -> t==500 ? t*t : t+t;
功能关税=t->t==500?t*t:t+t;
  • 使用括号
    {}
    需要
    return
    关键字
  • 原始类型比较是使用
    =
    而不是
    =
  • 当您要求将
    Double
    作为输出时,您需要强制转换
    (Double)
    ,因为
    int*int>int
    (与
    +
    相同)或使用
    函数
功能电价=t->{
如果(t==500){
返回(双)t*t;
}否则{
返回(双)t+t;
}
};

要简化,您可以执行以下操作:

Function<Integer, Double> tariff = t -> t==500 ? t*t : t+t;
功能关税=t->t==500?t*t:t+t;

您的代码有几个问题:

  • 平等性检查需要
    =
    t=500
    应该是
    t==500

  • 如果将复杂代码作为lambda,则
    return
    语句不是隐式的:因此
    t*t
    不会隐式返回

  • 通过将两个整数相乘/相加,您试图返回一个
    整数
    值,而预期的返回类型是
    double
    ,因此编译会出现问题

  • 类似这样的方法会奏效:

    公共静态功能电价=t->{
    如果(t==500){
    返回t*t;
    }否则{
    返回t+t;
    }
    };
    
    隐式回报适用于以下情况:

    公共静态功能电价=t->(t==500)?t*t:t+t;
    
    您的代码有几个问题:

  • 平等性检查需要
    =
    t=500
    应该是
    t==500

  • 如果将复杂代码作为lambda,则
    return
    语句不是隐式的:因此
    t*t
    不会隐式返回

  • 通过将两个整数相乘/相加,您试图返回一个
    整数
    值,而预期的返回类型是
    double
    ,因此编译会出现问题

  • 类似这样的方法会奏效:

    公共静态功能电价=t->{
    如果(t==500){
    返回t*t;
    }否则{
    返回t+t;
    }
    };
    
    隐式回报适用于以下情况:

    公共静态功能电价=t->(t==500)?t*t:t+t;
    
    您的函数正在抛出一个invalidAssignmentOperator,因为您实际上没有将
    t*t
    t+t
    赋值给任何对象。您可以尝试使用
    t*=t
    t+=t
    ,这样它将实际分配给
    t

    您的方法也没有返回任何内容,应该返回。对于我的上述想法,更好的解决方案是只返回这些值:

     public static Function<Integer, Double> tariff = t -> {
        if(t=500) {
            return t*t;
        } else {
            return t+t;
        }
    };
    
    公共静态功能电价=t->{
    如果(t=500){
    返回t*t;
    }否则{
    返回t+t;
    }
    };
    

    另外,请确保按照“我的代码”所示正确地隔开代码。它使它更易于阅读。

    您的函数抛出了一个invalidAssignmentOperator,因为您实际上没有将
    t*t
    t+t
    赋值给任何对象。您可以尝试使用
    t*=t
    t+=t
    ,这样它将实际分配给
    t

    您的方法也没有返回任何内容,应该返回。对于我的上述想法,更好的解决方案是只返回这些值:

     public static Function<Integer, Double> tariff = t -> {
        if(t=500) {
            return t*t;
        } else {
            return t+t;
        }
    };
    
    公共静态功能电价=t->{
    如果(t=500){
    返回t*t;
    }否则{
    返回t+t;
    }
    };
    

    另外,请确保按照“我的代码”所示正确地隔开代码。你是说如果(t=500)而不是如果(t=500)?因为
    t*t未存储在变量中、未作为参数传递或未返回给调用方,则它在Java中不是有效的表达式。在这种情况下,您可能应该返回它,因为您正在创建一个
    函数
    。另外,
    t=500
    t
    赋值给
    500
    ,这不是一个
    boolean
    ,因此您的代码不会编译。您的意思是if(t==500)而不是if(t=500)?因为
    t*t未存储在变量中、未作为参数传递或未返回给调用方,则它在Java中不是有效的表达式。在这种情况下,您可能应该返回它,因为您正在创建一个
    函数
    。另外,
    t=500
    t
    赋值给
    500
    ,这不是
    布尔值,因此您的代码无法编译。@Noomi nice;)不要犹豫,投赞成票/接受答案;)@努米尼斯;)不要犹豫,投赞成票/接受答案;)