이것이 자바다로 공부중입니다.
제네릭 클래스중 제한된 타입 파라미터 부분 공부중인데 이해안되는 부분이 있어서 질문드립니다.
class A
{
int intA;
}
class G extends A
{
int intG;
}
class H
{
static int Gfunc(T t1)
{
t1.intA; // 불가능?
t1.intG; // 가능?
}
}
이러한 제네렉 메소드가 있을때 이 메소드는 현재 제한된 타입 파라미터를 가집니다.
T 는 A를 상속하는 클래스이거나 A 클래스이어야하죠.
여기까지는 이해가 잘됐씁니다.
근데 책에서 메소드의 중괄호 { } 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)로 제한된다. 하위타입에만 있는
필드와 메소드는 사용할 수 없다. 라고 나와있습니다.
이부분이 이해가 잘안가는데 하위타입에만 있는 필드와 메소드는 왜 사용할 수 없다는 건지 잘 이해가 가질 않네요
T가 A를 상속하면 A 멤버 뿐만아니라 T의 멤버도 사용이 가능해야할텐데 왜 불가능한거죠?
위 예제에서 A클래스를 상속하는 G클래스가 있고 제네렉 메소드를 가지고 있는 H클래스가 있습니다.
H에서 intA를 호출하려고하는데 안되는게 혹시나 T의 타입이 정해지지 않았기 때문인건가요?
그냥 약속인건가요? 이해가 잘안갑니다 도와주세여
어디 제한된 타입 파라미터가 있다는거야? 질문할려면 똑바로 쳐올려. 아니면 문서를 보던가
아 형님이거 제가 실수한게 아니라 보니까 디씨 글쓸때 꺽쇄로 쓰니까 본문에서 나오질 않아요...제가 실수한건줄 알았는데 아예 나오질 않습니당...어디가 제한된 타입 파라미터냐면 class H <T> 이거에요
아니 여기또 제대로 안나오네.. 꺽쇄 사이야 T extedns A가 들어가야해요
예제가 조금 이상한데 Gfunc에 들어갈때 상속하는 (extends) 클래스로 명시할경우 상위클래스제한이 걸린다.
super 로 명시할경우 하위클래스 제한을 걸수있고.
윗댓글 참조좀 ㅠㅠ
지랄하네 제한된 타입 파라미터랑 공변, 반공변 구분도 못하네. 제한된 타입 파라미터로는 super 자체가 없다.
이분이 말씀하시는건 와일드카드 부분말씀하시는거아니에여?
https://m.blog.naver.com/PostView.nhn?blogId=qkrghdud0&logNo=220697126377&proxyRe한글ferer=https%3A%2F%2Fwww.goo한글gle.co.kr%2F
여기에 잘나와있고 4번 부분을 참고하길바란다
좀 아래에 있음
너부터 똑바로 배우는게 나을 듯
ㅠ감사하지만 이거 책내용이 그냥 이것이자바다를 정리해서 블로그에 올린거같은데 ㅠㅠ
책보지 마라. 공홈이나 영어 자료 봐라. 오라클 튜토리얼 문서에서 제네릭 읽어보고 구글에 java generics faq 쳐서 나오는 블로그에서 쭈욱 읽어나가라
결국 너도 답변 못하면서 욕이나 박는 놈이었네 ㅉㅉ