A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lijiy09 中级黑马   /  2016-3-18 11:24  /  965 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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类型,求大神解答?

4 个回复

倒序浏览
泛型的设计就是避免楼主的这种行为产生。但是泛型只是编译期检查,运行时不做检查,所以可以通过反射的方式来绕过泛型检查,具体代码如下:
  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流,正则表达式的题目!
回复 使用道具 举报
还是老实用String来添加吧,定义了泛型,就只能添加字符串了吧?
回复 使用道具 举报
ameanboy 发表于 2016-3-18 12:01
泛型的设计就是避免楼主的这种行为产生。但是泛型只是编译期检查,运行时不做检查,所以可以通过反射的方式 ...

嗯,反射这块我还不知道,只是看到泛型了有疑问,谢谢解答~
回复 使用道具 举报
你可以不用泛型,
或者用Object类型,
或者通过反射机制,绕过泛型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马