java - Java中的switch语句可以使用 "view"作为参数吗?

标签 java android switch-statement

我希望 switch 语句将 View 作为参数。我知道 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;
        }
 }

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

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

最佳答案

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

根据Java Language Specification :

The type of the Expression must be char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type (§8.9), or a compile-time error occurs.

至于你的问题:

IS there way to to take view as parameter?

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

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

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

关于java - Java中的switch语句可以使用 "view"作为参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424491/

相关文章:

android - 将通知从管理员传递给客户

node.js - JS/node.js : Large switch-case blocks vs. 函数集合

JavaFX Slider : Track length? 刻度标签颜色?

android - Activity 无法转换为 LifecycleOwner

java - Vaadin - 在表格内单击触发按钮

android - 如何让 Android Studio 自动建议代码修复

java - 如何使用widget.switch更改editText值Android

java - Java 中的 switch case 逻辑表达式语句 - 与 JS 或 PHP

java - double 转换为 NaN

java - 使用 android EditText 进行 out.write