2015-04-23 50 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); 
     } 
    } 
}