2015-01-31 5 views
0

나는 제네릭 클래스가 있습니다혼란, 자바

public class Test<T> { 

    private Test<? extends T> myInstance; 

    public Test<? extends T> getInstance() { 
     return myInstance; 
    } 

    public void setInstance (Test<? extends T> argType) { 
     this.myInstance = argType; 
    } 

} 

을 그리고 난 내 클래스 계층 관계에있는 두 개의 클래스가 있습니다

public abstract class Alphabet { 
    //code here 
} 

public class A extends Alphabet{ 

    public A() { 
     super(); 
     System.out.print("This is A call"); 
    } 
} 

마지막으로 나는이를 내가 저장하고 싶은 클래스는 특정 타입의 Generic 클래스 Test를 만들고 Object -> A의 새로운 인스턴스를 설정한다. setInstance() 방법 : 나는 tAlphabet.setInstance(new A());

내 제네릭 클래스의 문제는 무엇인가 라인에서 컴파일 오류를 가지고있다 그러나

public static void main(String[] args) { 
     List<Alphabet> list = new ArrayList<Alphabet>(); 

     Test<Alphabet> tAlphabet = new Test<Alphabet>(); 
     tAlphabet.setInstance(new A()); //Here is compilation ERROR 
} 

?

+3

'A'는'Alphabet'을 확장하지만'setInstance'는'Test'의 인스턴스를 필요로합니다. – Bubletan

+0

'Test '은'T'를 확장하는 제네릭 형식 인수로'Test'의 인스턴스를 나타냅니다. 예를 들어'Test '의 인스턴스는 'A'가'T' ('Alphabet ')를 확장하므로'Test '의 인스턴스입니다. – Bubletan

답변

1

인스턴스가 현재 작성된 Test 개체이며, 대신 Alphabet 개체를 제공하고 있습니다.

public class Test<T> { 
    private T myInstance; 

    public T getInstance() { 
     return myInstance; 
    } 

    public void setInstance(T argType) { 
     myInstance = argType; 
    } 
} 

이 방법, 당신의 Test 저장하는 대신 다른 TestAlphabet : 당신은 아마 인스턴스 유형 Alphabet의 싶어요.

1

당신이 필요한 것보다 복잡한 것을 만든 것 같습니다. 당신은 아마 대신 당신이 실제로 무엇을 당신의 테스트 클래스에서이 원하는 : 당신이 Test<Alphabet> 인스턴스 setInstance(new A()) 무료 것이 구성

private T myInstance; 

public T getInstance() { 
    return myInstance; 
} 

public void setInstance (T argType) { 
    this.myInstance = argType; 
} 

.

+0

흠? 내가 테스트 (내 경우에는) 받아 들일 수있는 제네릭의 유형이되었을 때, 내 경우에는 알파벳입니다, 이후 setInstance 메소드의 유형은 테스트 argType은 T - 알파벳과 그의 모든 유형이 될 수 있습니다 그런 다음 새로운 A() normaly를 처리 할 것으로 기대합니까? 내가 맞습니까? –

+0

당신은 당신이 왜 그 대답을 사실대로 받아들 였는지 설명 할 수 있습니까? 그동안 그걸 해결 했나? –

+0

예. 위 질문에서 문제를 이해했습니다. 답해 주셔서 감사합니다. 내 의견은 당신에게 머리였습니다. 고맙습니다. –