2014-10-06 3 views
0

소요 내가 가진 SuperQueue 클래스Instanize 자바 누구의 생성자 클래스 객체 인수

public class SuperQueue<E> implements Queue<E>{ 

SuperQueue(Class<? extends Queue<E>> subqClass) {} 

} 

가 어떻게이 SuperQueue 객체를 생성 할 수 제네릭 클래스? 나는 시도했다 :

SuperQueue<Integer> superq = new SuperQueue<Integer> (ConcurrentLinkedQueue.class) 

SuperQueue<Integer> superq = new SuperQueue<Integer> (ConcurrentLinkedQueue<Integer>.class) 
+0

처럼 사용할 수 있습니다. 클래스 참조가 아닙니다. SuperQueue와 같은 것 superq = new SuperQueue (new ConcurrentLinkedQueue ()) – StackFlowed

+0

'new ConcurrentLinkedQueue ()'은 클래스 객체가 아닌 큐 객체를 생성합니까? – Tim

+0

예 해당 줄의 의미는 클래스 큐를 확장해야하는 전달 된 개체입니다. – StackFlowed

답변

1

을 코드에서

SuperQueue<Integer> superq = new SuperQueue<Integer>(ConcurrentLinkedQueue.class); 

가 호환되지 않는 유형을 전달하는 Class<ConcurrentLinkedQueue>이를 만들려면 Class<? extends Queue<Integer>

로 변환 할 수 없기 때문에 개체, 구현하는 클래스를 전달해야합니다 Queue<Integer> 예 :

class Foo implements Queue<Integer> {...} 

그리고 당신은 당신은 대기열을 확장하는 클래스를 사용할 필요는이

SuperQueue<Integer> superq = new SuperQueue<Integer>(Foo.class); 
+0

하지만'ConcurrentLinkedQueue .class'를 전달할 수없는 이유는 무엇입니까? 'ConcurrentLinkedQueue '는 여러분의 예제에서 Foo와 같이'Queue '을 구현합니다. – Tim

+0

ConcurrentLinkedQueue 이 큐 이 아닌 큐 sol4me

+0

을 구현하기 때문에 @Tim : ConcurrentLinkedQueue 클래스 개체가 하나뿐이기 때문에. 다른 형식 인수에 대해 다른 인수는 없습니다. – newacct

0
SuperQueue<Integer> superq = 
    new SuperQueue<Integer>((Class<ConcurrentLinkedQueue<Integer>>) 
          (Class<?>)ConcurrentLinkedQueue.class); 
관련 문제