2017-04-25 5 views
1

이것이 올바른 방법인지 궁금합니다. 인스턴스 변수 중 하나가 제네릭 형식 인 매개 변수화 된 클래스의 인스턴스를 생성하려고합니다. 아래의 코드는 작동하지만 기본 메서드 "SomeObject는 원시 형식입니다."제네릭 형식 SomeObject에 대한 참조는 매개 변수화되어야합니다. "라는 경고가 많이 발생합니다.매개 변수화 된 클래스의 인스턴스화

public class SomeObject<T> { 

    private String description; 

    private T value; 


    public SomeObject(String description, T value) { 
     this.description = description; 
     this.value = value; 
    } 



public static void main(String args[]){ 

    List <SomeObject> objectList = new ArrayList<SomeObject>(); 

    objectList.add(new SomeObject("Object 1: ", true)); 
    objectList.add(new SomeObject("Object 2: ", 888.00)); 
    objectList.add(new SomeObject("Object 3: ", "another object")); 
    objectList.add(new SomeObject("Object 4: ", '4')); 

    for (SomeObject object : objectList){ 
    System.out.println(object.getDescription() + object.getValue()); 
    } 
} 

}

+1

어느 부분을 오류의 당신은 이해하지 못합니까? 실제로 제네릭을 사용해야합니다. – SLaks

+1

'new Object()'대신'new SomeObject()'가되어야합니까? – Flurin

+1

arraylist –

답변

4

작품 아래의 코드하지만 주요 방법에 경고를 많이 얻을 "개체는 원시 타입이다. 제네릭 형식 개체에 대한 참조 매개 변수가 해야한다".

경고는 SomeObject을 구성 할 때 유형 인수를 지정하지 않았기 때문에 발생합니다. 즉.

가 있어야한다 :

List<SomeObject<?>> objectList = new ArrayList<>(); 
objectList.add(new SomeObject<Boolean>("Object 1: ", true)); 
objectList.add(new SomeObject<Double>("Object 2: ", 888.00)); 
objectList.add(new SomeObject<String>("Object 3: ", "another object")); 
objectList.add(new SomeObject<Character>("Object 4: ", '4')); 
+0

type을 사용하여 objectList의 선언을 추가하여 답변을 완성 할 수 있습니까? –

+0

@RC. 확실한 것. –

+1

이것은 수락 된 대답이어야합니다 –

2

당신이 형식 인수 (대괄호의 부분)없이 SomeObject있을 때, 그건 raw type라고하며, 이는 SomeObject의 삭제를 사용하는 것과 동일합니다. (기본적으로 지우기는 비 제너릭을 의미합니다.)

ListSomeObject 부분에 형식 인수를 제공해야합니다. 나는 여기 SomeObject의 모든 유형을 저장할 수있는 목록을 의미 와일드 카드를 사용했지만, 우리는 목록에 SomeObject을 넣어 한 번 우리는 원래의 형식 인수가 더 이상 무엇인지 모른다 :

List<SomeObject<?>> objectList = new ArrayList<SomeObject<?>>(); 

objectList.add(new SomeObject<Boolean>("Object 1: ", true)); 
objectList.add(new SomeObject<Double>("Object 2: ", 888.00)); 
objectList.add(new SomeObject<String>("Object 3: ", "another object")); 
objectList.add(new SomeObject<Character>("Object 4: ", '4')); 

for (SomeObject<?> object : objectList) { 
    ...; 
}