Java 利用注解反射对不同类型的数据转化

不同的数据怎么才能转化相同的数据呢?比如我们需要的Node 数据,里面包括ID 和 Name ,但是外部能给的是FileBean 和JavaBean ,这种情况下,只能通过注解和反射来转化数据了。

先看看Node 类:

/**
 * 节点
 */
public class Node {

    private String id ;
    private String name;
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

NodeId 注解:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NodeId {
}

NodeName 注解:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NodeName {
}

FileBean 类:

/**
 * 数据类型
 */
public class FileBean {

    @NodeId
    private String id ;
    @NodeName
    private String name ;

    public FileBean(String id , String name)
    {
        this.id = id;
        this.name = name;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

JavaBean 类:

/**
 * 数据类型
 */
public class JavaBean {

    @NodeId
    private String id ;
    @NodeName
    private String name ;

    public JavaBean(String id ,String name)
    {
        this.id = id;
        this.name = name;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

数据转化:


  private  List  convertData(List datas) throws IllegalAccessException {
          List nodes = new ArrayList<>();
          Node node = null;
          for(T t :datas)
          {
              node = new Node();
              //获取Class 对象
              Class cl = t.getClass();
              // 获取Fileld
              Field[] fields = cl.getDeclaredFields();
              for(Field field :fields)
              {
                  if(field.getAnnotation(NodeId.class)!= null)
                  {
                      field.setAccessible(true);
                      node.setId((String)field.get(t));
                      nodes.add(node);
                      tv.append(node.getId()+"\n");
                  }
              }

          }
          return nodes ;
    }

这样就能轻松的转化数据了。

你可能感兴趣的:(Java 利用注解反射对不同类型的数据转化)