>source

내 의도는배열 목록하지만 그 전에 목록을 수정하는 동안 문제가 발생했습니다. 목록에 다른 요소 추가하기

UnsupportedOrderException

왜?

class Mine implements Cloneable {
    public List<Integer> list;
    Mine(List<Integer> mylist) {
        this.list= mylist;
    }
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        List<Integer> klist= Arrays.asList(10,20,30,40,50);
        Mine m1=new Mine(klist);
        m1.list.add(11); //<-why i am unable to add to the list
        Mine m2= (Mine) m1.clone();
    }
}

@AritroShome, List는 ArrayList 뿐만 아니라 많은 구현이 있는 인터페이스입니다.

Matthieu2021-10-03 07:37:32

List는 자체 구현이 없는 인터페이스입니다. 대신 List를 구현하는 ArrayList를 사용하십시오.

Aritro Shome2021-10-03 07:47:26
  • 답변 # 1

    @dan1st의 답변(지금은 @JonSkeet도 포함) 외에도 자신만의 답변을 만들 수 있습니다.asList()변경 가능을 반환하는 메소드목록< T> :

    static public List<T> asMutableList(T ... elts) {
        List<T> lst= new ArrayList<>(elts.length);
        for (T el : elts) {
            lst.add(el);
        }
        return lst;
    }
    

  • 답변 # 2

    요소의 수는 변경할 수 없습니다.목록(사용추가하다()또는제거하다()또는 유사)에 의해 반환됨Arrays.asList(그러나 그것은 다음을 사용하여 요소를 변경할 수 있습니다..세트()).

    보낸 사람:

    반환된 목록은 반환된 목록의 크기를 변경하는 방법을 제외하고선택적 Collection 메서드를 구현합니다. 이러한 메서드는 목록을 변경하지 않고 UnsupportedOperationException을 발생시킵니다.

    대신 다음을 만들 수 있습니다.배열 목록동일한 요소:

    List klist= new ArrayList<>(Arrays.asList(10,20,30,40,50));
    

    나는 Arrays.asList()를 사용하고 있다는 것을 완전히 잊었습니다. 내가 그 점을 놓치는 그런 바보. 어쨌든 감사합니다!!

    man1232021-10-03 07:26:33

    일반적으로 In은 해당 List를 수정하지 않으려는 경우에만 Arrays.asList를 사용합니다.

    dan1st2021-10-03 07:27:54

    @dan1st ArrayList= Arrays.asList(myObjectArray); ?

    Aritro Shome2021-10-03 07:28:53

    예, ArrayList를 생성하지 않고 ArrayList에 할당하려고만 하기 때문에 작동하지 않습니다. Arrays.asList가 java.util.ArrayList를 반환하지 않기 때문에 컴파일 시간 오류가 발생합니다.

    dan1st2021-10-03 07:30:44

    문서에 대한 링크를 추가했습니다.

    dan1st2021-10-03 07:32:51
  • 답변 # 3

    는 다음을 반환합니다.목록< T> 원래 배열이 뒷받침하는 구현. (배열로 변경하면 목록을 통해 볼 수 있으며 그 반대의 경우도 마찬가지입니다.)

    자바에서는 배열의 크기가 고정되어 있으므로 반환되는 목록은Arrays.asList고정된 크기도 있어야 합니다. 추가할 수도 없고 제거할 수도 없습니다.

    새 항목을 만들 수 있습니다.ArrayList< T> 대신 배열의 사본이 생성됩니다.

    List list= new ArrayList<>(Arrays.asList(...));
    

    그래도배열 목록여전히 어레이에 의해 지원되며 필요한 경우 새 어레이를 생성합니다. 배열은 에 의해 반환되는 기존 배열에 대한 "보기"가 목록이 아니라 구현 세부 사항입니다.Arrays.asList.

  • 이전 sockets : Dart에서 문자열을 utf8로 어떻게 변환합니까?
  • 다음 gis : 열린 레이어 6의 래스터 정적 이미지 레이어에서 선택한 그리기 다각형 영역만 표시할 수 있습니까?