Cak*_*ray 5 java enums switch-statement
我有一个空的界面Units,我用来标记不同的enums所以我知道他们拥有不同的单位(例如我有一个enum TemperatureUnits implements Units{}存储华氏温度,摄氏温度等,然后我有一个DistanceUnits持有米,脚等.
我想根据enum传递给方法的值在switch/case中做不同的事情.我希望它接受来自任何enum实现的值Units.问题是,由于enums实际上是不同的类,我必须在switch/case中使用值的限定名称.我的代码看起来像这样:
public static void foo(Units units){ //units has to be an enum that implements Units
switch (units){
case TemperatureUnits.FAHRENHEIT: //I can't say just FAHRENHEIT, because Units itself doesn't
//have a FAHRENHEIT value, but it won't let me say TemperatureUnits.FAHRENHEIT because it won't let use
// qualified enum values as cases.
//Do stuff
break;
case DistanceUnits.METERS:
//Do other stuff
break;
//...etc
Run Code Online (Sandbox Code Playgroud)
如何使用可以使用不同值的switch/case语句enums?
编辑:我的Units界面只是:
public interface Units{
String getLabel();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用instanceof运算符来确定enum传入的内容,然后switch基于适当的enum:
public static void foo(Units units) {
if(units instanceof DistanceUnits) {
DistanceUnits d = (DistanceUnits) units; // METERS, INCHES...
switch (d) {
case METERS:
// code
break;
case INCHES:
// code
break;
}
}
else if(units instanceof TemperatureUnits) {
TemperatureUnits t = (TemperatureUnits) units; // FAHRENHEIT, CELSIUS
switch (t) {
case FAHRENHEIT:
// code
break;
case CELSIUS:
// code
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到这一点:
enum DistanceUnits implements Units {
METERS, INCHES
}
enum TemperatureUnits implements Units {
FAHRENHEIT, CELSIUS
}
public interface Units {
// some code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |