Java 利用注解反射对不同类型的数据转化
2018-06-10 本文已影响0人
5e30a667061c
不同的数据怎么才能转化相同的数据呢?比如我们需要的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 <T> List<Node> convertData(List<T> datas) throws IllegalAccessException {
List<Node> 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 ;
}
这样就能轻松的转化数据了。