反思,java,迭代集合

时间:2015-06-12 16:21:08

标签: java reflection collections

我正在编写一个迭代某个集合的函数,我不知道我得到了什么集合,所以我写到现在为止,PrintFieldsOfClass会得到一些对象或对象集合,我将不得不打印类的字段,我让它适用于某些类,想要添加集合支持。

void PrintFieldsOfClass(Object obj){
    if(obj ==null){
        return;
    }
    Class<?> mainClass = obj.getClass(); // create instance of the class
    Class<?>[] interfaces =null;
    Object collection = null;
    int isCollection = 0; //1 - for List , 2 -  For Set , 3 - Map
    if(mainClass !=null ){
        interfaces = mainClass.getInterfaces();
    }
    try {
        if(interfaces!=null ){
            for(Class<?> interface1 : interfaces ){



                if(interface1.getName().toString().equals("java.util.List"))                     {
                    isCollection = 1;
                    collection = new ArrayList<Object>();
                }
                else            if(interface1.getName().toString().equals("java.util.Set")){
                    isCollection=2;
                    collection = new HashSet<Object>();
                }
            }
        }

`

在我知道我收集了什么样的集合之后,如何将对象转换为该集合?我如何迭代它? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

你有没有试过像:

void printFieldsOfClass(Object obj) {
    if (obj == null) {
        return;
    }

    // Deal with collections...
    if (obj instanceof Collection) {
      for (Object o : ((Collection<Object>) obj)) {
        printFieldsOfClass(o);
      }

      return;
    }

    // Otherwise it is a 'simple' object...
    Class<?> mainClass = obj.getClass(); // create instance of the class
    Class<?>[] interfaces =null;
    Object collection = null;
    int isCollection = 0; //1 - for List , 2 -  For Set , 3 - Map
    if(mainClass !=null ){
        interfaces = mainClass.getInterfaces();
    }
    try {
        if(interfaces!=null ){
            for(Class<?> interface1 : interfaces ){



                if(interface1.getName().toString().equals("java.util.List"))                     {
                    isCollection = 1;
                    collection = new ArrayList<Object>();
                }
                else            if(interface1.getName().toString().equals("java.util.Set")){
                    isCollection=2;
                    collection = new HashSet<Object>();
                }
            }
        }