黑马程序员技术交流社区

标题: 泛型创建对象添加元素类型? [打印本页]

作者: lijiy09    时间: 2016-3-18 11:24
标题: 泛型创建对象添加元素类型?
public static void main(String[] args) {
       LinkedList<String> link = new LinkedList<String>();
       String s1= "we";
       String s2= "they";
       int s3 = 10;

      link.add(s1);
      link.add(s2);
      link.add(s3);

在讲泛型时,创建对象时就得明确对象类型,这里link.add()方法添加完两个String类型后,想再添加一个int类型的数据怎么办啊,并不想把int类型转换为String类型,求大神解答?

作者: ameanboy    时间: 2016-3-18 12:01
泛型的设计就是避免楼主的这种行为产生。但是泛型只是编译期检查,运行时不做检查,所以可以通过反射的方式来绕过泛型检查,具体代码如下:
  1. public static void main(String[] args) throws Exception {
  2.         LinkedList<String> link = new LinkedList<String>();
  3.         String s1 = "we";
  4.         String s2 = "they";
  5.         int s3 = 10;

  6.         link.add(s1);
  7.         link.add(s2);
  8.         //link.add(s3);        编译报错 无法运行
  9.         // 反射绕过泛型检查
  10.        
  11.         // 首先取得LinkedList类的字节码文件
  12.         Class clazz = Class.forName("java.util.LinkedList");
  13.         // 获取LinkedList类的add方法,并将其参数设置为Object(可添加任意对象,或者设置成String也可以,根据题目要求)
  14.         Method m = clazz.getMethod("add", Object.class);
  15.         m.invoke(link, "这是一个字符串");
  16.        
  17.         System.out.println(link);
  18.     }
复制代码


希望多来一些网络,反射,IO流,正则表达式的题目!
作者: wlsperfect    时间: 2016-3-18 20:54
还是老实用String来添加吧,定义了泛型,就只能添加字符串了吧?
作者: lijiy09    时间: 2016-3-19 10:26
ameanboy 发表于 2016-3-18 12:01
泛型的设计就是避免楼主的这种行为产生。但是泛型只是编译期检查,运行时不做检查,所以可以通过反射的方式 ...

嗯,反射这块我还不知道,只是看到泛型了有疑问,谢谢解答~
作者: 就是我    时间: 2016-3-19 10:58
你可以不用泛型,
或者用Object类型,
或者通过反射机制,绕过泛型




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2