Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java对象中动态选择字段_Java_Database_Select_Enums - Fatal编程技术网

从Java对象中动态选择字段

从Java对象中动态选择字段,java,database,select,enums,Java,Database,Select,Enums,我有一个Java对象,表示数据库的内容,如下所示: public Database { int varA; String varB; double varC; } 现在,我尝试选择和排序某些元素以进行进一步处理,但我想使其可配置,因此我创建了一个枚举,它表示对象的所有属性,如 public enum Contents { VarA, VarB, VarC; } 所以现在当我创建一个选择时 Contents[] select = { Conten

我有一个Java对象,表示数据库的内容,如下所示:

public Database {
    int varA;
    String varB;
    double varC;
}
现在,我尝试选择和排序某些元素以进行进一步处理,但我想使其可配置,因此我创建了一个枚举,它表示对象的所有属性,如

public enum Contents {
    VarA,
    VarB,
    VarC;
}
所以现在当我创建一个选择时

Contents[] select = { Contents.VarC, Contents.VarB };
我想从中生成一个字符串值列表,表示实际的数据库内容。现在我能想到的唯一实现是切换选择中的每个条目,具有非常难看的二次复杂性

public List<String> switchIT(Database db, Contents[] select) {
    List<String> results = new ArrayList<String>();

    for (Contents s : select) {
        switch(s) {
            case VarA:
                results.add(db.varA.toString());
                break;
            //go on...
        }
    }

    return results;
}
public List switchIT(数据库数据库,目录[]选择){
列表结果=新建ArrayList();
对于(内容:选择){
开关{
case VarA:
添加(db.varA.toString());
打破
//继续。。。
}
}
返回结果;
}
是否有更直接的方法在枚举和动态对象值之间映射?
或者更一般地说:从对象中动态选择值的最佳方法是什么?

使用Java枚举的强大功能,Java枚举是成熟的类

public enum Contents {
  VarA { public String get(Database d) { return d.getVarA(); } },
  VarB { public String get(Database d) { return d.getVarB(); } },
  VarC { public String get(Database d) { return d.getVarC(); } };
  public String get(Database d) { return ""; }
}
然后,您的客户机代码变为

public List<String> switchIT(Database db, Contents[] select) {
  List<String> results = new ArrayList<String>();
  for (Contents s : select) results.add(s.get(db));
  return results;
}

使用Java枚举的强大功能,它是成熟的类

public enum Contents {
  VarA { public String get(Database d) { return d.getVarA(); } },
  VarB { public String get(Database d) { return d.getVarB(); } },
  VarC { public String get(Database d) { return d.getVarC(); } };
  public String get(Database d) { return ""; }
}
然后,您的客户机代码变为

public List<String> switchIT(Database db, Contents[] select) {
  List<String> results = new ArrayList<String>();
  for (Contents s : select) results.add(s.get(db));
  return results;
}

嗯,我知道有那么简单的方法^^嗯,我知道有那么简单的方法^^