开发者社区> 问答> 正文

泛型list(列表为空),如何获取里面元素的类型:报错

     场景:基于标注实现Execl格式的导入/导出,支持多个sheet,每个sheet对应的javabean不一样,每个javabean里面定义了标注(包含每个sheet的表头,列名,哪些列需要合计,业务格式化输出等信息)

#n个sheet数据
 asheetname -->> List<ABean> alist;
 bsheetname -->> List<BBean> blist;
 nsheetname -->> List<NBean> nlist;
//下面model是封装n个sheet的模型,通过反射做的一个公共的导入\导出数据框架
 Map<String,List<?>> model;
 model.put(asheetname ,alist); 
 model.put(bsheetname ,blist); 
 model.put(nsheetname ,nlist);

基于这个model导出一个execl文件,分成N个sheet显示,每个sheet的列名,表头信息,在NBean里用标注定义了; 

问题是:要读取标注信息获取列名信息的话,要知道对应Bean的class类型才行,如果列表不为空的话,直接list.get(0)获取第一个元素,然后getClass,再获取对应的标注信息即可,但是列表为空怎么去获取呢?因为列表为空的时候,仍然要把列名在sheet里显示出来的 

网上搜了,没找到解决办法,但是我觉得这肯定能做到的,因为list中元素的类型在编译时候就已经确定了,没道理运行时还获取不到


更加简单的描述:

public class Test{

    public getType(List<?> list){
    //如何打印出这个?的类型来?前提是这个list.isEmpty()==true
    }

    public static void main(String args){

        List<Double> list1 = new ArrayList<Double>();
        getType(list1);//list1里面没有元素,希望输出java.lang.Double@somewhere

        List<Date> list2 = new ArrayList<Date>();
        getType(list2);//list2里面没有元素,希望输出java.util.Date@somewhere
    }
}



展开
收起
kun坤 2020-06-07 15:59:19 812 0
1 条回答
写回答
取消 提交回答
  • 你这个应该至少要将JavaBean的名字和list存在一起才能得到那些信息吧?

    ######这样当然可以,可是觉得好别扭,不是吗?在定义这个list的时候,JavaBean左右list的泛型参数不是和list已经绑定了吗,还要再显示的再放一起,感觉上太多此一举了。但是不放一起,又不知道有没有API可以获取到,纠结######同学,泛型信息会在编译后的class中擦除,java的泛型是伪泛型。######了解了下,确实做不到,不过涨知识了######

    Java做不到。

    Java的泛型只是让你更Type Safe,没有把类型信息带到运行时。

    ######好失望啊,看样子得让调用的地方显示的告诉框架具体的类型了######

    哈,不怕喷,有时不得不“炫耀”式劝勉一句,不要去折腾那些会把简单得事情搞复杂的工具。c里面,所谓的“范性”指针和宏定义就完成了关联。当然要想实际实现,需要自己手工编写具体代码。不过自己设计的时间和脑力劳动量,不会高于整天琢磨不清楚里面怎么实现而做的思考。甚至有些是让编译器去完成的工作。

    ######java帮助IT业吸纳了不少民工######赞同
    2020-06-07 15:59:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载