구체적 유형으로 객체를 인스턴스화 할 때 변수에 제네릭 유형을 사용할 수없는 이유는 무엇입니까?

알렉세이 갈라 노프
class A{}
class B extends A {}
class C extends B {}
class D<C> {
    C c = new A(); // COMPILER ERROR
}

유형 삭제 코드가 다음과 같이 된 후 :

class D {
    Object c = new A();
}

그래서 여기서 문제는 무엇입니까?

존 스키트

그래서 여기서 문제는 무엇입니까?

첫 번째 문제는 내이다 D<C>, C라는 유형 매개 변수를 의미한다 C, 하지 클래스 C확장 B. 다음으로 제네릭을 무시하더라도

C c = new A(); // Invalid

... 컴파일하지 않을 것입니다 ... 대신에 일반적으로 다음과 같습니다.

A a = new C(); // Normally fine - but not if C is a type parameter!

다음을 사용해 보았다고 가정합니다.

D<String> d = new D<String>();

그런 다음 컴파일러에게이 줄이 유효한 것으로 간주하도록 효과적으로 요청합니다.

String c = new A();

그것은 분명히 깨졌습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관