获取类属性名称,类型和if集合,然后获取集合的泛型类型

时间:2016-11-23 10:33:19

标签: java xml xpath

public class Table{
private Long id = 1;
private String name;
List<Terms> terms;
Map<String,Address>
//getters and setters
}

我需要做的是我需要将我的类表与数据库表链接,并且上面的类中的每个元素都是数据库表中的一个概念,我根据我的xml和相关的数据库表具有整个java类结构DB应该是最好的方法。 根据我的理解,我现在能想到的是那个

  1. 使用反射获取字段名称并应用我的业务逻辑
  2. 使用我的xml的XPath并使用XPath直接链接每个概念

  3. 每次从DB和XML获取值并使用一些中介逻辑链接它。

  4. 如果可能,请建议并提供一些代码虚拟代码

1 个答案:

答案 0 :(得分:1)

    You can try with below example:

    Iterator<Table> iterator=tableList.iterator();
    boolean foundConcept=false;
    while(iterator.hasNext())
    {
        foundConcept=false;
    Table table=iterator.next();
    String conceptName=table.getConceptDetails().getName();
    Field fieldArr[]=Table.getClass().getDeclaredFields();
    List<Field> fields=Arrays.asList(fieldArr);
     Iterator<Field> iterator1 =fields.iterator();
    int i=0;
    while(iterator1.hasNext())
    {
    Field field=iterator1.next();
    field.setAccessible(true);
    System.out.println(field.getName()+"  @   "+field.getType());
    if(field.getName().equalsIgnoreCase(conceptName) &&     String.class.isAssignableFrom(field.getType()))
    {
    foundConceptMap.put(conceptName, (field.get(Table)).toString());
    foundConcept=true;
    break;
    }
    else
       {
       Type type = field.getGenericType();
    if (type instanceof ParameterizedType) {
    ParameterizedType pType = (ParameterizedType)type;
    System.out.print("Raw type: " + pType.getRawType() + " - ");
    System.out.println("Type args: " + pType.getActualTypeArguments()[0]);
    if("java.util.List".equalsIgnoreCase(pType.getRawType().getTypeName()))
    {
        String classWithPackage=pType.getActualTypeArguments()[0].getTypeName();
        String className="";
        if(classWithPackage.contains("."))
        {
            className=classWithPackage.substring(classWithPackage.lastIndexOf(".")+1);
        }
        else
        {
        className=classWithPackage;
        }
        System.out.println(className);

        if("Terms".equalsIgnoreCase(className))
        {
            List<Terms> list=Table.getTerms();
            setTerms(list, foundConceptMap, conceptName);
        }
    }
    }
    }