제네릭을 이용하여 매개변수를 받으면 기본적으로 Object클래스의 메소드만을 사용할 수 있으며,
원래의 메소드를 사용하려면 형변환 후 사용해야합니다.
.
.
interface Simple{
public void showYourName();
}
class UpperClass{
public void showYourClass(){
System.out.println("Upperclass");
}
}
class Aa extends UpperClass implements Simple{
public void showYourName(){
System.out.println("ClassAa");
}
}
class Bb extends UpperClass implements Simple{
public void showYourName(){
System.out.println("ClassBb");
}
}
class BoundedParam{
public static void main(String[] args){
Aa a = new Aa();
Bb b = new Bb();
showInstClass(a);
showInstName(a);
showInstClass(b);
showInstName(b);
}
public static <T> void showInstClass(T param){
((Simple)param).showYourName();
// 제네릭을 이용하여 매개변수를 받으면 기본적으로 Object클래스의 메소드만을 사용할 수 있으며,
// 원래의 메소드를 사용하려면 형변환 후 사용해야함
}
public static <T> void showInstName(T param){
((UpperClass)param).showYourClass();
}
}
.
.
이런 경우에 형변환하지 않고도 매개변수를 사용할 수 있습니다.
.
.
interface Simple{
public void showYourName();
}
class UpperClass{
public void showYourClass(){
System.out.println("Upperclass");
}
}
class Aa extends UpperClass implements Simple{
public void showYourName(){
System.out.println("ClassAa");
}
}
class Bb extends UpperClass implements Simple{
public void showYourName(){
System.out.println("ClassBb");
}
}
class BoundedParam2{
public static void main(String[] args){
Aa a = new Aa();
Bb b = new Bb();
showInstClass(a);
showInstName(a);
showInstClass(b);
showInstName(b);
}
public static <T extends Simple> void showInstClass(T param){
// 제네릭의 자료형 제한에서는 클래스와 인터페이스를 구분하지 않아서 두 경우 모두 extends를 사용함
param.showYourName();
}
public static <T extends UpperClass> void showInstName(T param){
// <T extends UpperClass> : 제네릭으로 자료형 지정시 반드시 Upperclass클래스를 상속받는 자료형으로 지정하라는 의미
param.showYourClass();
// 받아온 매개변수가 무조건 UpperClass의 하위클래스이므로 자동으로 UpperClass형으로 작업하는 것
}
}
.
.
대신에 <>선언해줄 대 extends로 통해 형변환을 생략할 수 있다.
728x90
반응형
'Java > 본격 Java 컬렉션' 카테고리의 다른 글
[Java] LinkedList (0) | 2020.07.03 |
---|---|
[Java] ArrayList (0) | 2020.07.03 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2020.07.03 |
[Java] 제네릭 메소드 (0) | 2020.07.03 |
[Java] 제네릭 클래스 - 과일상자 실습 (0) | 2020.07.03 |