2013-10-25 3 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 = 당신은 반복자 ... HTTP를받은 후 목록을 변경하려고 – user162114

+0

를 공유 : //www.javacodegeeks.com/2011/05/를 avoid-concurrentmodificationexception.html –

1

보통 당신이 특정 객체가 공유하는 모든 방법을 포함하는 Interface을 정의하는 것입니다 확인하시기 바랍니다. 그런 다음 특정 인터페이스를 구현하는 멤버를 사용하는 목록을 정의합니다.

나의 제안은 같은 모음 점유율 항목이 몇 가지 일반적인 동작을 가정합니다.

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

또 다른 방법은 전혀 타입을 정의하지 않는 것 :

List list = new ArrayList(); 
... 

두 방법의 차이는 첫째를 들어, 당신이 정확히 무엇을 당신이 사용할 수있는 알고 있다는 것입니다. 캐스팅/체크가 필요없고 컴파일 타임에 특정 오류가 발견 될 수 있습니다. 그러나 첫 번째 접근 방식은 설계 단계에서 좀 더 많은 사고가 필요합니다.

후자는 캐치 모든 시나리오의 더 그러나 그것은 당신이 작업중인 개체의 유형의 확인하기 위해 검사 및 다른 메커니즘을해야합니다.

+0

실제 답변이 필요합니다. – snh

0

다른 개체가있는 경우 먼저 모든 개체가 공유하는 유사성을 정의하십시오. 이제 객체 클래스가 확장하거나 구현하는 수퍼 클래스 또는 인터페이스를 만듭니다. 그런 다음 상위 인터페이스 또는 수퍼 클래스 목록을 정의하십시오. 런타임에서 알고있는 경우 특정 오브젝트로 목록의 오브젝트를 형변환하십시오. 그렇지 않으면 고려중인 모든 오브젝트 유형과 오브젝트 유형을 일치 시키십시오.

또 다른 방법으로 List of Object 클래스를 만들 수 있습니다. 런타임에서 적절한 객체에 캐스트하거나 이전에 일치시킨 것과 같이 검색된 객체를 다른 객체 유형의 컬렉션과 일치시킵니다.

위의 절차는 코드 작성이 쉬워야합니다.

관련 문제