【问题标题】:Why does this code throw an invalidAssignmentOperator error on the * and + operators?为什么此代码会在 * 和 + 运算符上引发 invalidAssignmentOperator 错误?
【发布时间】:2019-04-26 17:09:06
【问题描述】:

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

public static Function<Integer, Double> tariff = t -> {
    if (t = 500) {
        t * t;
    } else {
        t + t; 
    }
};

【问题讨论】:

  • 您的意思是 if(t==500) 而不是 if(t=500)?
  • 因为t * t; 不是Java 中的有效表达式,如果它没有存储在变量中、作为参数传递或返回给调用者。在这种情况下,您可能应该返回它,因为您正在创建一个Function。此外,t = 500t 分配给500,这不是boolean,因此您的代码将无法编译。

标签: java function lambda


【解决方案1】:

您的代码有几个问题:

  1. 平等检查需要==t=500应该是t==500

  2. 当你有一个复杂的代码作为 lambda 时,return 语句不是隐式的:所以t*t 不会隐式返回。

  3. 通过将两个整数相乘/相加,您试图返回一个 integer 值,而您的预期返回类型是 double,因此存在编译问题。

这样的事情会起作用:

  public static Function<Integer, Integer> tariff = t -> {
    if (t == 500) {
      return t * t;
    } else {
      return t + t;
    }
  };

隐式返回适用于这样的事情:

  public static Function<Integer, Integer> tariff = t -> (t == 500) ? t * t : t + t;

【讨论】:

    【解决方案2】:
    • 使用方括号 {} 需要 return 关键字
    • 原始类型比较是使用 == 而不是 =
    • 当您要求Double 作为输出时,您需要转换(double),因为int*int &gt; int(与+ 相同)使用Function&lt;Integer, Integer&gt;
    Function<Integer, Double> tariff = t -> {
        if(t==500) {
            return (double)t*t;
        } else {
            return (double)t+t;
        }
    };
    

    为了简化你可以这样做:

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

    【讨论】:

      【解决方案3】:

      您的函数正在抛出一个 invalidAssignmentOperator,因为您实际上并未将 t*tt+t 分配给任何东西。您可以尝试使用 t*=tt+=t 以便它实际分配给 t

      你的方法也没有返回任何东西,它应该。对我上面的想法一个更好的解决方案是只返回这些值:

       public static Function<Integer, Double> tariff = t -> {
          if(t=500) {
              return t*t;
          } else {
              return t+t;
          }
      };
      

      另外,请务必按照我的代码所示正确分隔您的代码。它使阅读更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 2013-03-11
        • 1970-01-01
        相关资源
        最近更新 更多