2013-02-04 8 views
1

제네릭 형식을 사용할 때 문제가 있습니다. IDE는 나에게 다음과 같은 오류를 보여줍니다 ...일반 메서드 매개 변수로 사용하기

Cannot select from a type variable 

내가 여기 유형의 삭제에 문제가 있다고 생각하지만, 내가 여기에 생각하는 몇 가지 해결 방법을 존재

내 코드 :이 문제를 해결하는 방법

class MyFactory { 
    public Object getByClass(Class<?> clazz) { 
    ..... 
    } 
} 


class<T> MyClass { 
    private Object myObj = MyFactory.getByClass(T.class); // HERE ERROR, `Cannot select from a type variable` 
    ... 
} 

?

+0

유형 삭제 때문에 런타임시 'T.class'가 참조해야하는 것을 알 수 없습니다. – millimoose

+0

@millimoose'T'의'Type'은'Class'가 아닐 수도 있습니다. –

답변

3

Class 개체를 생성자로 전달하십시오.

private final Class<T> clazz; 
private Object myObj 
public MyClass(Class<T> clazz, MyFactory myFactory) { 
    this.clazz = clazz; 
    this.myObj = myFactory.getByClass(clazz); 
} 
+1

읽지 말아야 할 내용 : this.myObj = myFactory.getByClass (clazz); 또한 myFactory 인스턴스를 전달해야한다고 생각하지 않습니다. – JeroenWarmerdam

+0

@JeroenWarmerdam 그래, 고정. –

+0

@JeroenWarmerdam (나는'T.class'를'clazz'에 고정 시켰습니다 .' getByClass'는 인스턴스 메소드로 선언되었습니다. 인스턴스 메소드가 아니라면 전역 상태를 제안하는 경향이 있습니다 (나쁜 일).) –

관련 문제