제네릭 (Java)에서 바운드 형식 매개 변수를 사용하고 있습니다.기본적으로 자식 클래스 개체를 수락하는 경우 제한된 형식의 매개 변수를 제네릭으로 사용하는 이유는 무엇입니까?
class First<T extends Use>{
T s;
First(T s){
this.s=s;
}
void setS(T s){
this.s=s;
}
void getS(){
System.out.println(s);
}
}
class UseChild extends Use{
public String toString(){
return "I am UseChild";
}
}
class Use{
public String toString(){
return "I am Use";
}
public static void main(String[] args){
First <Use> f1 = new First <Use> (new Use());
f1.getS();
f1.setS(new UseChild());
f1.getS();
}
}
출력은 다음의 확인 지금까지
I am Use
I am UseChild
. "T extends Use"가 Type 매개 변수에 있기 때문에 setS()에 자식 클래스 객체를 전달할 수 있다고 생각했습니다. 그렇지 않으면 I could not.
class First<T>
{
//Same code as above
}
내 의심은 다음과 같습니다 : 내가 설정에 자식 클래스 개체를 전달할 수 있다면 무엇에 대한 특별한 것은 키워드를 확장()없이
하지만하지 않고 형식 매개 변수를 사용하고있는 경우 출력은 동일 같이 키워드를 확장 키워드를 확장합니까?
감사합니다.하지만 나는 다른 의심을 가지고 있습니다. 처음으로 어떤 물건이라도 건네 줄 수 있습니다. 하지만 클래스 f1의 객체를 이미 통과 시켰습니다.이 type 매개 변수 컴파일러 인 경우 주어진 f1에 UseChild 객체가 아닌 Use 객체 만 허용해야합니다. 매개 변수 유형이 이면 둘 다 허용 될 수 있습니다. –
@mynameisGYAN'UseChild'는 객체이므로 type 매개 변수가 ''일 때 전달 될 수 있습니다. 'Use'를 확장하지만'Use'도'Object'를 확장합니다 (모든 객체가 확장). 그래서 간접적으로'UseChild'는'Object'를 상속합니다. 따라서 type 매개 변수가 ''일 때 전달 될 수 있습니다. –
nhouser9
내가 틀릴 수도 있지만, 내가 얻는 것은 :