2013-10-25 108 views
-5

我應該使用哪個類來創建不同類型的集合?我有不同類的對象的ArrayList或LinkedList時出錯。用於存儲不同類的對象的類?

import java.util.*; 
class A extends Object { 
    private String name; 
    A(String n) { name = n;} 
    public String toString() { return name;} 
} 
class B extends Object { 
    private String name; 
    B(String n) {name = n;} 
    public String toString() { return name;} 
} 

class c { 
    public static void main(String args[]) { 
     ArrayList ml= new ArrayList(); 
     ml.add(new A("1")); 
     ml.add(new A("2")); 

     Iterator itr = ml.iterator(); 
     B b = new B("1001"); 
     ml.add(b); 

     while(itr.hasNext()) { 
      Object element = itr.next(); 
      System.out.println(element + "\n"); 
     } 
     System.out.println(); 
    } 
} 
+0

並祈禱告訴我們可能是什麼錯誤。 – Kayaman

+4

請將您的代碼發送至 –

+0

查看我的回答,是否有解決方法,但我很好奇你在做什麼? –

回答

0

守則後特羅例外:java.util.ConcurrentModificationException

此exeption的原因 - 獲取迭代器後更改列表。 您應該在獲取迭代器之前更改列表。

請查看文章http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html

+0

這是什麼?這與什麼有關? – snh

+0

這裏是我的代碼的鏈接。請幫助:https://docs.google.com/document/d/1K7Gd3nFYQvlTESYWnoFXyJ4JRiMm03iAY5ci9SrRUSc/edit?usp = sharing – user162114

+0

您試圖在獲取迭代器後更改列表... http://www.javacodegeeks.com/2011/05/ avoid-concurrentmodificationexception.html –

1

一般你會定義一個Interface它包含了所有這些特定對象共享的方法。然後,您將定義一個列表,其中包含實現該特定界面的成員。

我的建議假設同一集合中的項目共享一些共同的行爲。

List<MyInterface> list = new ArrayList<MyInterface>(); 
... 

另一種方法是不定義任何類型都:

List list = new ArrayList(); 
... 

兩種方法之間的區別在於,第一個,你確切地知道你有,你可以使用的東西。不需要投射/檢查,在編譯時可以捕捉到某些錯誤。但是,第一種方法在設計階段需要更多的思考。

後者更多的是抓住所有的情況,但它需要你做檢查和其他機制,以確定你正在使用什麼類型的對象。

+0

嗚呼爲真正的答案! – snh

0

如果您有不同的對象,首先定義它們共享的任何相似性。現在創建一個超類或者對象類擴展或實現的接口。然後定義一個高級接口或超類的列表。如果您知道,則在運行時中,將列表中的對象與特定對象一起轉換。否則,將對象類型與所考慮的所有對象類型進行匹配。

另一種方法是製作一個Object類的List。在運行時將其轉換爲適當的對象,或者像前一次匹配檢索到的對象與您的不同對象類型的集合。

上述程序應該很容易編碼。