我希望 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/