集合的问题

package cn.com.liheng.Test;

import java.util.ArrayList;
import java.util.List;

import cn.com.liheng.entity.User;

public class Test {
public static void main(String[] args) {
User a=new User("1","黑狗","白狗");
User b=new User("2","野狗","白狗");
List c=new ArrayList();
c.add(a);
c.add(b);
System.out.println("新闻标题数量"+c.size()+"条");
for (int i = 0; i < c.size(); i++) {
User n=(User) c.get(i);
System.out.println((i+1)+":"+n.getName());
}
}
} 为什么get()方法要进行强转了?

3个回答

确实,是由于楼主你没有指定List内元素的类型,所以在get的时候默认是按Object来看的。如果在声明List时指定了泛型,之后就可以使用for-each的方式遍历,比如
[quote]
for (int i = 0; i < c.size(); i++) {
User n=(User) c.get(i);
System.out.println((i+1)+":"+n.getName());
}
[/quote]
可以改成
[code="java"]
List users = new ArrayList();
for (User u : users) {
System.out.println(u.getName());
}
[/code]

List c=new ArrayList();

改成这样就不需要强制转换了,使用java泛型

iteye_7115
iteye_7115 用了泛型就显示表明集合放的数据类型了,如果没有的话,通过get方法只是返回Object类型,泛型是jdk1.5后新增的功能,具体知识你找个java资料都会有
6 年多之前 回复
iteye_2837
iteye_2837 java泛型是什么意思为什么使用了泛型就可以不用强制转换?泛型是代表指定一种集合吗?
6 年多之前 回复

1:因为你的c是这样定义的List c=new ArrayList();这里你并没有指定集合里装的是什么类型,所以当把对象放进去后,都会被转成默认的Object类型:
2:所以你get获得的类型是Object,那么要想获得一个User类型就需要强制转换
3:如果这个list里面装的都是User的话你可以这样解决
List c=new ArrayList();

walthahat
千年松鼠728 楼主神采纳
6 年多之前 回复
walthahat
千年松鼠728 拿你这个问题来说,List<T>是java中的集合类,而具体往这个集合类里面装什么东西可以有我们自己来决定,我们可以往里面装String,Integer或者是其他自定义的类型。为什么可以这样呢,就是因为这个T是泛型
6 年多之前 回复
walthahat
千年松鼠728 给你举个例子吧,比如说你想写一个类例如public class Home(T){},那么当不确定参数T是什么类型的时候,就可以用泛型。 所以说泛型是java用来支持创建可以按类型进行参数化的类。 java里面的集合类是支持泛型的 这样说可以理解么
6 年多之前 回复
iteye_2837
iteye_2837 谢谢!
6 年多之前 回复
iteye_2837
iteye_2837 java泛型是什么意思为什么使用了泛型就可以不用强制转换?泛型是代表指定一种集合吗?
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐