首页 > 解决方案 > Java中的switch语句可以将“view”作为参数吗?

问题描述

我希望 switch 语句将 View 作为参数。我知道视图基本上是布局上的小部件。但是当我将视图作为论点时它不起作用。它在绿色案例中显示错误为“需要常量表达式”

public void onClick(View v) {
   switch(v) {
      case green:
          CL.setBackgroundColor(Color.parseColor("#00ff00"));
          break;
      case R.id.button:
          CL.setBackgroundColor(Color.BLUE);
          break;
   }
}

当我将 switch(v.getId()) 作为参数时,它工作正常:

public void onClick(View v) {
        switch(v.getId()) {
            case R.id.button2:
                CL.setBackgroundColor(Color.parseColor("#00ff00"));
                break;
            case R.id.button:
                CL.setBackgroundColor(Color.BLUE);
                break;
        }
 }

有没有办法将视图作为参数?我已经在之前的代码中分配了视图

Button blue= (Button)findViewById(R.id.button);
Button green=findViewById(R.id.button2);

标签: javaandroidswitch-statement

解决方案


a 中的变量switch只能是原语、其包装器、枚举或字符串。

根据Java 语言规范

表达式的类型必须是 char、byte、short、int、Character、Byte、Short、Integer、String 或枚举类型(第 8.9 节),否则会发生编译时错误。

至于你的问题:

有没有办法将视图作为参数?

不,不是这样。Enum但是,您可以为应该打开的每个视图创建一个类型。通常,您可以扩展View该类或简单地给它一个枚举字段。但是,由于它似乎是您无法控制的库对象,因此我会将视图 ID 映射到枚举值,如下所示:

    switch(v.getId()) {
        case Foo.BAR1:
            // doStuff
            break;
        case Foo.BAR2:
           // doOtherStuff
           break;
        default:
    }

请注意,在这种情况下以及使用 的所有其他情况下,Enum必须在编译时设置枚举的值。


推荐阅读