不同的數(shù)據(jù)怎么才能轉(zhuǎn)化相同的數(shù)據(jù)呢?比如我們需要的Node 數(shù)據(jù)租冠,里面包括ID 和 Name 鹏倘,但是外部能給的是FileBean 和JavaBean ,這種情況下顽爹,只能通過注解和反射來轉(zhuǎn)化數(shù)據(jù)了纤泵。
先看看Node 類:
/**
* 節(jié)點
*/
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 類:
/**
* 數(shù)據(jù)類型
*/
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 類:
/**
* 數(shù)據(jù)類型
*/
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;
}
}
數(shù)據(jù)轉(zhuǎn)化:
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 ;
}
這樣就能輕松的轉(zhuǎn)化數(shù)據(jù)了。