场景:基于标注实现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 } }
你这个应该至少要将JavaBean的名字和list存在一起才能得到那些信息吧?
######这样当然可以,可是觉得好别扭,不是吗?在定义这个list的时候,JavaBean左右list的泛型参数不是和list已经绑定了吗,还要再显示的再放一起,感觉上太多此一举了。但是不放一起,又不知道有没有API可以获取到,纠结######同学,泛型信息会在编译后的class中擦除,java的泛型是伪泛型。######了解了下,确实做不到,不过涨知识了######Java做不到。
Java的泛型只是让你更Type Safe,没有把类型信息带到运行时。
######好失望啊,看样子得让调用的地方显示的告诉框架具体的类型了######哈,不怕喷,有时不得不“炫耀”式劝勉一句,不要去折腾那些会把简单得事情搞复杂的工具。c里面,所谓的“范性”指针和宏定义就完成了关联。当然要想实际实现,需要自己手工编写具体代码。不过自己设计的时间和脑力劳动量,不会高于整天琢磨不清楚里面怎么实现而做的思考。甚至有些是让编译器去完成的工作。
######java帮助IT业吸纳了不少民工######赞同版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。