2010-02-05 5 views
0

arraylist를 복사하고 서로 독립적 인 두 개의 목록을 가지려면 참조 전체가 아닌 다른 목록으로 개체를 복사해야합니다. 그러나이 방법을 사용할 수는 있습니다. -수업?Java에서 arraylist를 한 클래스에서 다른 클래스로 복사하는 방법은 무엇입니까?

예 : Class1에서 Class2를 호출합니다. Class2에서 개체는 이벤트가 발생하면 사용자 지정 개체의 ArrayList에 추가됩니다. 이 ArrayList 클래스 1 전달할 수 싶습니다하지만 때마다 NullPointer 얻을 시도합니다.

모든 단서 ??

+2

코드를 게시하십시오. 두 클래스. – duffymo

+1

나는 이런 식으로 데이터 목록을 공유하는 두 개의 클래스가있는 디자인에 대해 궁금해 할 것입니다. 단 하나의 클래스가 그것을 소유해야합니다. 왜 이것을해야합니까? 설명 해주십시오. – duffymo

답변

0

제 제안은 getArray() 메소드를 작성하여 다른 클래스에서 호출하는 것입니다. 클래스 내에서 변수를 "전송"해서는 안되기 때문에이 메서드는 ArrayList의 복사본을 만들어야합니다. 항상 OO 패러다임이 그대로 유지되도록 get() 메소드를 사용한다. 이 같은

어떻게 좀 : 클래스 2에

클래스 1

public ArrayList<Object> getArray() { 
    ArrayList<Object> aux = new ArrayList<Object>(); 
    for(Object x : list) //object is the string, int, etc... 
     aux.add(x.clone()) //assuming the Object has a clone method! 
    return aux; 
    } 

, 그냥이 메서드를 호출합니다. 그런 다음 null 예외에 대한 다른 대답의 테스트를 살펴보고 작동해야합니다. 도움이 되길 바랍니다.

+0

어려운 부분이기 때문에 값을 복사하는 방법에 대해서도 설명하십시오. – Thilo

+0

목록을 반환하지 마십시오! 그것의 복사본을 반환, 그렇지 않으면 당신은 내가 같은 물건을 망쳐 놓을까요! 나머지 코드는 괜찮습니다. @cletus – simaofreitas

+0

이런 식으로. 나는 원본을 편집했다. – simaofreitas

1

이것은 설계상의 결함을 크게 나타냅니다.

클래스에서 목록을 래핑하고 클래스를 공유하고이를 사용하여 목록에 대한 액세스를 제어함으로써 동일한 목표를 달성 할 수 없는지 확인하십시오.

두 가지 클래스가 독립적으로 목록을 수정해야하는 경우에만이 작업이 완전하게 작동하지 않는 유일한 경우입니다.

이것이 필요한 경우라면, 나는 (래퍼 클래스의 다른 인스턴스를 각각의 수정 클래스 (동일한 소스리스트에 대한 참조)에 건네 주면 새로 추가 된 데이터가 원래 클래스를 참조하는 ID - 쿼리 할 때 래퍼는 태그가없는 항목 (원래 공유 목록에 포함 된 항목)과 태그가 지정된 항목 만 자신의 ID로 반환합니다.

래퍼 클래스에는 두 번째 목록이 포함될 수 있으며 쿼리 할 때 원래 목록과 두 번째 목록의 결합 된 결과를 반환 할 수 있습니다.

나는 깊은 사본을 원한 적이 거의 없었다. 그것은 일어난다. 그러나 그것은 아주 드물다.

더 많은 정보를 게시하면 재 디자인을 돕는 데있어 더 구체적 일 수 있습니다.

ALSO : (편집) 복사 된 배열 목록이 문제가되지 않을 가능성이 있습니다. 아마도 완전한 사본이 아닐 수도 있습니다. 깊은 복사의 경우, 복사 방법을 구현한다는 것을 의미합니다 (나는 그들이 .clone()이라고 불리우는 것으로 믿습니다. 배열 목록에있는 각 객체에 대해, 내가 말했던 것처럼, 나는 결코 사용하지 않습니다. 당신은 당신의 다음 목록에 새로운 사본을 얻기 위해 각각에 당신의 사본 방법을 부른다.

또한 복사 된 개체가 참조하는 개체도 복제해야합니다. "깊은"은 나무 아래로 모든 길을 의미합니다.

나는 당신이 그 과정에서 어딘가에 실패하고 있다고 생각합니다.

나는 왜 당신이 참조 대신 복사본이 필요하다고 느끼는지 듣고 싶습니다.