可以在Java中切换语句" view"作为论点?

时间:2018-05-19 10:52:52

标签: java android switch-statement

我希望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);

1 个答案:

答案 0 :(得分:0)

switch中的变量不能是原语,包装,枚举或字符串。

根据Java Language Specification

  

Expression的类型必须是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的所有其他情况下,必须在编译时设置枚举值。