[英]cast object to enum JAVA
我必须遍历myEnum.values()
,只知道myEnum
实现特定的interface
让我们假设我有接口statsInterface
我只有很少的枚举来实现此接口
enum statsfromMachine1
enum statsfromMachine2
..
后来我想遍历。 我在想什么
public void interfaceEnumImplParser (statsInterface _interface ,object _myinterfaceImplEnum, string Input) {
for ((_interface)_myinterfaceImplEnum iterable_element : _myinterfaceImplEnum.values()) {
//do stuff here
}
}
但是我在这里丢失了一些东西,甚至无法编译。可以吗?
看起来您想直接在迭代中将enum
转换为接口类型。 如果是这样,则应将代码修改为如下所示。
public void interfaceEnumImplParser (statsInterface _interface ,object _myinterfaceImplEnum, string Input) {
for (_interface iterable_element : _myinterfaceImplEnum.values()) {
//do stuff here
}
}
希望能有所帮助。
我写了一个小样本,可以帮助您为多个枚举找到通用的实现逻辑。
interface Doable<B>{
B doStuff(Number a);
String getCategory()
}
enum StatsFromMachine1 implements Doable<String> {
ABC{
@Override
public String doStuff(Number a) {
return Integer.toString(a.intValue() + 3);
}
};
@Override
public String getCategory() {
return "S1";
}
}
enum StatsFromMachine2 implements Doable<String>{
X(1.4), Y(2.86), Z(0.1);
private Double d;
@Override
public String doStuff(Number x) {
return Double.toString(x.doubleValue() * this.d);
}
private StatsFromMachine2(Double d) {
this.d = d;
}
@Override
public String getCategory() {
return "S2";
}
}
当枚举实现相同的接口时,很容易编写适用于所有枚举的代码。 实际上,无论实现是由枚举还是其他方式提供,这种抽象都无关紧要。
public static String doStuffWithEnums(){
Collection<Doable<String>> collection = Arrays.asList(StatsFromMachine1.values());
collection.addAll(Arrays.asList(StatsFromMachine2.values()));
StringBuilder sb = new StringBuilder();
for(Doable<String> d : collection){
sb.append(d.doStuff(5.0));
if(d.getCategory().equals("S1")){ // alternatively use an instanceOf check
sb.append(((StatsFromMachine1)d).name());
}
}
return sb.toString();
}
好的,我已经弄清楚了,谢谢您的帮助,在查看您的内容后,您将获得+1 :)因此,基本上,我有实现interface I1
enum E1
以“一般”方式遍历enum
成员:
public static void parse_log_with_enum(I1 ... Is)
{
for (I1 i1 : Is) {
// do something with i1
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.