java - 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);
解决方案
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
必须在编译时设置枚举的值。
推荐阅读
- reactjs - 如何在 Apollo 中为 refetchQueries 传递变量
- cassandra - Cassandra 前缀搜索
- pdo - 交易是否正确?
- mongodb - 无法执行类似 mongo 的查询
- c - C中的旋转程序
- go - 为什么 Golang 的 MD5 分布看起来不均匀?
- android - 如何修复与recyclerview重叠的视图?
- javascript - “错误:找不到 Opus 引擎。” 尝试播放 mp3 文件时 (discord.js)
- javascript - 在这种情况下,如何检查 json 数组的成员是否为空?
- apache - 如何在 apache httpd.conf 中添加注释而不是完整的行?