我定义了多个class,如多个class实例为class1, class2, class3, class4,我要把这些实例放到一个ArrayList里面,由于class1, class2, class3, class4属于不同的类型,所以我只能使用ArrayList <Object> list = new ArrayList <Object >()来定义这个ArrayList。以后我要提取其中的元素来操作,如Object a = list.get(3);但是我不知道a属于什么class,所以又要想办法获得这个Class的名称,如知道它是属于class2,所以使用class2 b = (class2)a强制转换类型。这样的操作很麻烦,有没有其他好办法处理这类事情?

解决方案 »

  1.   

    这种情况下,就算你用反射,也未必能很有效的降低工作量。另一种情况是这些Class其实所需被调用的函数是共性的,那么可以抽取一个Interface来定义这些函数,那么就可以声明为: List<IMyType> 这种了。
      

  2.   

    这种情况下,反射所带来的问题比它能解决的问题要多。像二楼所说的,抽离出一个共同的接口,你的这些类都实现这个接口,如果你发现抽离不出来,那么你就审视一下代码了:为什么你要把没有共性的东西放进一个List里面?
      

  3.   

    Object a = list.get(3);
    if(a instanceof class1){
       class1 cl1 = (class1)a;
    }else if(a instanceof class2){
       ....................
    }else if(a instanceof class3){
       ....................
    }
      

  4.   

    2楼和5楼说的都很对,不过从你的描述来说还是用instanceof 好些
      

  5.   


    instanceof代表与具体类型绑定,是代码的坏味道!