【问题标题】:Bad return type in lambda expression: Cannot be converted to booleanlambda 表达式中的错误返回类型:无法转换为布尔值
【发布时间】:2019-02-12 07:19:58
【问题描述】:

我需要通过触摸按钮来更改 shapeType。我尝试了这种方法,但出现错误,提示 shapeType 无法转换为布尔值。 代码:

public class MainActivity extends AppCompatActivity {

private ArFragment arFragment;

private enum ShapeType {
    GIRAFFE,
    HIPPO,
    ELEPHANT
}

private ShapeType shapeType = ShapeType.GIRAFFE;

@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);

    Button giraffe = findViewById(R.id.giraffebutt);
    Button hippo = findViewById(R.id.hippobutt);
    Button elephant = findViewById(R.id.elephantbutt);

    giraffe.setOnTouchListener(view -> shapeType = ShapeType.GIRAFFE);
    hippo.setOnTouchListener(view ->shapeType = ShapeType.HIPPO);
    elephant.setOnTouchListener(view ->shapeType = ShapeType.ELEPHANT);
  }
}

错误:

Bad return type in lambda expression: ShapeType cannot be converted to boolean

【问题讨论】:

  • 触摸监听器应该返回一个布尔值。更改您的 lambda 表达式以执行此操作。
  • view -> { shapeType = ShapeType.GIRAFFE; return false;} 应该这样做。其他 2 个 lambdas 也一样
  • 不确定具体的 android 构造,但即使 shapeType == ShapeType.GIRAFFE 也应该这样做。

标签: java android lambda


【解决方案1】:

你的 onTouch() 方法现在期望返回一个布尔值,你没有返回任何东西,改变你的 lambda,如下所示。

giraffe.setOnTouchListener(
(view, motionEvent) -> {
    shapeType = ShapeType.GIRAFFE;
    return false;
});

【讨论】:

  • 如果我删除 return,它需要 return 语句。
【解决方案2】:

Button 的setOnTouchListener 提供ViewMotionEvent,并期望boolean 返回类型。

giraffe.setOnTouchListener((view, event) -> {
    shapeType = ShapeType.GIRAFFE);
    return true; // return true if event is consumed, false otherwise
});

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 2021-11-01
    相关资源
    最近更新 更多