2015-04-23 24 views
0

我有两个类A和B,其中A是基类和B选自A.角色到继承的类从ArrayList的基类的

Class A 
{ 
    int foo=10; 
} 

Class B extends A 
{ 
    int bar=100; 
} 

继承我声明类的ArrayList并插入类A和B类对象。

我的问题是,当我尝试获得B类对象,它是在类的ArrayList中,然后将其转换为B类如下

B foobar = (B)ArrayListOfClassA.get(IndexOfClassB). 

的对象B酒吧是不确定的值。

如何从类A的ArrayList中获取对象B的值?

+1

这是令人担忧的;为什么你打算将两个几乎没有关联的对象存储在同一个列表中? – Makoto

+5

你可以把你的实际代码放在这里,这件事情不应该发生 – Vihar

+0

@Makoto说的对。你可以先检查instanceof操作符。 – Prashant

回答

2

不要尝试这样的类型转换实例。在使用getClass()==调用任何方法/字段之前检查类型。

if(myInstance.getClass()==B.class) 
//print myInstance.bar 

注:这是不是一个好的设计,因为你是打破最重要的仿制药中引入了(你可以看看会发生什么,当你做到这一点)

0

不明白什么你需要确切的,但我试图写一些测试,它是行之有效的

@Test 
public void test() { 
    class A { 
     int foo = 10; 
    } 

    class B extends A { 
     int bar = 100; 
    } 

    ArrayList list = new ArrayList(); 
    Random r = new Random(); 
    for (int i=0; i<10; i++) { 
     if (r.nextBoolean()) { 
      list.add(new A()); 
     } else { 
      list.add(new B()); 
     } 
    } 

    ArrayList<A> listA = new ArrayList<A>(); 
    ArrayList<B> listB = new ArrayList<B>(); 
    for (Object o: list) { 
     if (o instanceof B) { 
      listB.add((B) o); 
     } else if (o instanceof A) { 
      listA.add((A) o); 
     } 
    } 
}