黑马程序员技术交流社区
标题:
泛型创建对象添加元素类型?
[打印本页]
作者:
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
泛型的设计就是避免楼主的这种行为产生。但是泛型只是编译期检查,运行时不做检查,所以可以通过反射的方式来绕过泛型检查,具体代码如下:
public static void main(String[] args) throws Exception {
LinkedList<String> link = new LinkedList<String>();
String s1 = "we";
String s2 = "they";
int s3 = 10;
link.add(s1);
link.add(s2);
//link.add(s3); 编译报错 无法运行
// 反射绕过泛型检查
// 首先取得LinkedList类的字节码文件
Class clazz = Class.forName("java.util.LinkedList");
// 获取LinkedList类的add方法,并将其参数设置为Object(可添加任意对象,或者设置成String也可以,根据题目要求)
Method m = clazz.getMethod("add", Object.class);
m.invoke(link, "这是一个字符串");
System.out.println(link);
}
复制代码
希望多来一些网络,反射,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