List 泛型参数动态的问题

gaoshuaidage 2008-12-12 03:29:18
public void test(Class<T> clazz)
{
List list = new ArrayList();
}
这个clazz是从别的地方传过来的,可不可以指定list只能存储这个Class

我用 List<clazz> list = new ArrayList<clazz>(); 并且在类名后加上 <clazz>编译可以通过,但是运行时在后面还可以给list add不同于clazz的对象,不知道这是为什么?
...全文
290 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZiSheng 2008-12-14
  • 打赏
  • 举报
回复
String 类型向class类型转换当然出错了。
ZiSheng 2008-12-14
  • 打赏
  • 举报
回复

public class Test <T> {

public void test(Class <T> clazz){

List <Class <T>> list = new ArrayList <Class <T>>();

Object str = new String("aa");
list.add((Class <T>) str); //你的这句错了,改为list.add((Class <T>) str.getClass());
System.out.println("hello");
}

public static void main(String[] args){

Test t = new Test();
t.test(String.class);

}
}
wm920 2008-12-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 java2000_net 的回复:]
但是运行时在后面还可以给list add不同于clazz的对象
1 你确信你的list 是泛型声明的吗?
2 你确信你添加的不是一个子类?

Java code List<String> list = new ArrayList<String>();


你看看是不是只能向list里面加入字符串?呵呵
[/Quote]

他说的对,望楼主检查一下
gaoshuaidage 2008-12-13
  • 打赏
  • 举报
回复
public class Test <T> {

public void test(Class <T> clazz){

List <Class <T>> list = new ArrayList <Class <T>>();

Object str = "aa";
list.add((Class <T>) str.getClass());

Object timestamp = new Timestamp(100);
list.add((Class <T>) timestamp.getClass()); //没有出错
}

public static void main(String[] args){

Test t = new Test();
t.test(String.class);
}
}


拜托哪位大侠看看,为什么那里没有出错。
likgui 2008-12-12
  • 打赏
  • 举报
回复
应该是加入了不同类型的对象,认真检查下
gaoshuaidage 2008-12-12
  • 打赏
  • 举报
回复
换成list.add((Class <T>) str.getClass()); 没有错了

public class Test<T> {

public void test(Class<T> clazz){

List<Class<T>> list = new ArrayList<Class<T>>();

Object str = "aa";
list.add((Class<T>) str.getClass());

Object timestamp = new Timestamp(100);
list.add((Class<T>) timestamp.getClass());
}

public static void main(String[] args){

Test t = new Test();
t.test(String.class);

}
}
可是这段代码跑起来也正常,貌似传进去的"String.class"没有起到作用
胡须棉花糖 2008-12-12
  • 打赏
  • 举报
回复
list.add((Class <T>) str.getClass());
gaoshuaidage 2008-12-12
  • 打赏
  • 举报
回复
TO java2000_net
List<String> list = new ArrayList<String>(); 这么定义的话当然只能添加String类型的了
但是3楼的贴代码为什么会出错

TO duanjianbo
试过了还是不行的
gaoshuaidage 2008-12-12
  • 打赏
  • 举报
回复
不强制转换的话,编译器不让通过啊
为什么已经指定List存储String类型 还会出错呢
老紫竹 2008-12-12
  • 打赏
  • 举报
回复
但是运行时在后面还可以给list add不同于clazz的对象
1 你确信你的list 是泛型声明的吗?
2 你确信你添加的不是一个子类?
 List<String> list = new ArrayList<String>();

你看看是不是只能向list里面加入字符串?呵呵
duanjianbo26 2008-12-12
  • 打赏
  • 举报
回复
list.add((Class <T>) str);
改为:

list.add(str.getClass());
试试
捏造的信仰 2008-12-12
  • 打赏
  • 举报
回复
Object str = new String("aa");
list.add((Class <T>) str);

你为什么要把 str 强制转换为 T?你明明知道 str 是字符串类型的。
gaoshuaidage 2008-12-12
  • 打赏
  • 举报
回复
谢谢各位

但我在跑下面这个代码时会出 "java.lang.ClassCastException: java.lang.String" 为什么啊?
public class Test<T> {

public void test(Class<T> clazz){

List<Class<T>> list = new ArrayList<Class<T>>();

Object str = new String("aa");
list.add((Class<T>) str);
}

public static void main(String[] args){

Test t = new Test();
t.test(String.class);

}
jiaping108 2008-12-12
  • 打赏
  • 举报
回复

public void test(Class <T> clazz)
{
List<Class<T>> list = new ArrayList<Class<T>>();

}
ty_fzpb 2008-12-12
  • 打赏
  • 举报
回复

List<Class<T>> list = new ArrayList<Class<T>>();

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧