问题描述
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()方法要进行强转了?
解决方案
确实,是由于楼主你没有指定List内元素的类型,所以在get的时候默认是按Object来看的。如果在声明List时指定了泛型,之后就可以使用for-each的方式遍历,比如引用for (int i = 0; i < c.size(); i++) { User n=(User) c.get(i); System.out.println((i+1)+":"+n.getName()); } 可以改成List<User> users = new ArrayList<User>();for (User u : users) { System.out.println(u.getName()); }
解决方案二:
1:因为你的c是这样定义的List c=new ArrayList();这里你并没有指定集合里装的是什么类型,所以当把对象放进去后,都会被转成默认的Object类型:2:所以你get获得的类型是Object,那么要想获得一个User类型就需要强制转换3:如果这个list里面装的都是User的话你可以这样解决 List<User> c=new ArrayList<User>();
解决方案三:
List<User> c=new ArrayList<User>(); 改成这样就不需要强制转换了,使用java泛型