다음 코드와 같이 List를 초기화 할 수 없습니다.
List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));
다음과 같은 오류가 발생합니다.
유형을 인스턴스화 할 수 없습니다
List<String>
어떻게 인스턴스화 할 수 List<String>
있습니까?
답변
API 를 확인하면 다음과 List
같이 표시됩니다.
Interface List<E>
인 interface
이 인스턴스화 할 수없는 수단을 (더 new List()
불가능하다).
해당 링크를 확인하면 다음 class
을 구현 하는 es가 있습니다 List
.
알려진 모든 구현 클래스 :
AbstractList
,AbstractSequentialList
,ArrayList
,AttributeList
,CopyOnWriteArrayList
,LinkedList
,RoleList
,RoleUnresolvedList
,Stack
,Vector
그것들은 인스턴스화 될 수 있습니다. 그들의 링크를 사용하여 그들에 대해 더 많이 알 수 있습니다.
가장 일반적으로 사용되는 3 가지는 다음과 같습니다.
List<String> supplierNames1 = new ArrayList<String>();
List<String> supplierNames2 = new LinkedList<String>();
List<String> supplierNames3 = new Vector<String>();
보너스 : 다음과 같이를
사용하여보다 쉬운 방법으로 값으로 인스턴스화 할 수도 Arrays
class
있습니다.
List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));
그러나 목록에 더 많은 요소를 추가 할 수 없습니다 fixed-size
.
답변
인터페이스를 인스턴스화 할 수 없지만 구현이 거의 없습니다.
JDK2
List<String> list = Arrays.asList("one", "two", "three");
JDK7
//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
JDK8
List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());
JDK9
// creates immutable lists, so you can't modify such list
List<String> immutableList = List.of("one", "two", "three");
// if we want mutable list we can copy content of immutable list
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));
또한 Guava 와 같은 다른 라이브러리에서 제공하는 다른 많은 방법이 있습니다.
List<String> list = Lists.newArrayList("one", "two", "three");
답변
List는 Interface 이며 인터페이스는 규칙이므로 클래스에 어떤 메소드가 있어야하는지 인터페이스를 인스턴스화 할 수 없습니다. 인스턴스화하려면 해당 인터페이스의 구현 (구현)이 필요합니다. 매우 인기있는 List 인터페이스 구현으로 아래 코드를 사용해보십시오.
List<String> supplierNames = new ArrayList<String>();
또는
List<String> supplierNames = new LinkedList<String>();
답변
당신은 ArrayList<String>
등 을 사용해야 합니다.
List<String>
인터페이스입니다.
이것을 사용하십시오 :
import java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<String>();
답변
List는 인터페이스이므로 인터페이스를 초기화 할 수 없습니다. 대신 구현 클래스를 인스턴스화하십시오.
처럼:
List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
답변
List는 인터페이스 일 뿐이며 일부 일반 목록의 정의입니다. 이 목록 인터페이스의 구현을 제공해야합니다. 가장 일반적인 두 가지는 :
ArrayList- 배열에 구현 된 목록
List<String> supplierNames = new ArrayList<String>();
LinkedList- 상호 연결된 요소 체인처럼 구현 된 목록
List<String> supplierNames = new LinkedList<String>();
답변
대부분의 경우 간단한 ArrayList
구현을 원합니다.List
JDK 버전 7 이전
List<String> list = new ArrayList<String>();
JDK 7 이상에서는 다이아몬드 연산자를 사용할 수 있습니다
List<String> list = new ArrayList<>();
자세한 내용은 여기 Oracle 설명서-컬렉션에수록되어 있습니다.