当前位置:编程学习 > JAVA >>

java 强制转换问题

package bag;
2    import java.util.ArrayList;
3    public class text {
4    public static void main(String[] args) {
 5   ArrayList list = new ArrayList();
 6    Circle o = new Circle(1);
  7    Object p = new Circle(2);
 8    list.add(o);
 9    list.add(p);
10   System.out.println(o.getArea()); 
11  System.out.println(((text1)p).getArea());
 12    System.out.println(((text1) list.get(0)).getArea());
13    System.out.println(((text1) list.get(1)).getArea());
 }
}
第10行和第11行都能懂,能明白为什么要进行转换
但是为什么第12行和第13行都要进行强制转换呢?list.get(0)得到的不就是o吗??不就相当于o.getArea()了嘛?? Java 对象 类 ArrayList --------------------编程问答-------------------- object --------------------编程问答-------------------- 那是因为你的list没有使用泛型,没有明确指定类型。
所以list.get的返回类型默认都是Object型的。 --------------------编程问答-------------------- 看看方法的返回值是什么就知道了 --------------------编程问答-------------------- 因为你将Circle和object两种对象放进list里面,而你又没用泛型定义list的类型,所以java默认list里所有的对象都是object类型,Circle在add进list的时候被向上转成object了.

java中的集合只能放同一种类型的数据,这个你应该知道吧 --------------------编程问答--------------------
引用 楼主 feizhouchaoren123 的回复:
package bag;
2    import java.util.ArrayList;
3    public class text {
4    public static void main(String[] args) {
 5   ArrayList list = new ArrayList();
 6    Circle o = new Circle(1);
  7    Object p = new Circle(2);
 8    list.add(o);
 9    list.add(p);
10   System.out.println(o.getArea()); 
11  System.out.println(((text1)p).getArea());
 12    System.out.println(((text1) list.get(0)).getArea());
13    System.out.println(((text1) list.get(1)).getArea());
 

本身创建对象的时候就不是object类型的啊~~而且调用list.get的返回类型默认是Object型的.现在想想取值~必然得强转一下~ --------------------编程问答-------------------- public E get(int index)返回此列表中指定位置上的元素。  返回值是E 这个E就是ArrayList对象所指定的类型  楼主创建对象的时候ArrayList list = new ArrayList(); 未指定类型 所以要强转 --------------------编程问答-------------------- 在不用泛型的情况下,get得到的都是Object对象 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 楼上所言极是 --------------------编程问答-------------------- 程序不知道list里放的是什么类型,主要得开list定义的类型是什么,如果不是定义的类型,就有可能要使用强转了,但不是所有类型都能强转哦。 --------------------编程问答-------------------- java1.5之前没有泛型这玩意的时候, ArrayList里的元素只有一种类型就是Object。所以当你不用泛型的时候,从ArrayList拿出来的对象都是Object类型的。所以必须强转,才能使用此对象的方法。 --------------------编程问答-------------------- 用 Object转 --------------------编程问答-------------------- 因为没有使用泛型,get(int index)返回的类型都是object,因此要进行强转。 --------------------编程问答-------------------- 学习了,高人多很 --------------------编程问答-------------------- list没用泛型,得到的引用是Object类型的.... --------------------编程问答-------------------- 可以查看jdk帮助文档,像这个问题你可以看看帮助文档中的返回值类型及一些介绍,慢慢的你就自己能理解了
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,