chapter 13 제네릭
13.4 제네릭 메소드
13.5 제한된 타입 파라미터
13.6 와일드카드
Ex03
어떤 메소드에 제네릭을 걸어 타입을 정할수 있게..?
메소드 안에서만 타입이 결정
public static void method1() {
}
근데 90%이상 가 유추가 가능해서 이클립스에서 잡아줌
Ex03
결과값
굳이 , 를 쓰지 않아도 이클립스에서 거의 잡아줌
Ex03 public static <T, U> void method3(T param1, U param2)
여러개의 제네릭 타입받기 이것도 이클립스에서 유추해서 잡아줌
결과값
교재 661,662( 교재 658 Box,BoxExample 가 만들어져야함
class Util, BoxingMethodExample
class Box
class Util
class BoxingMethodExample
Box box1 = Util.boxing(100);
Box box2 = Util.boxing("김태희");
box2에서 Util.boxing("김태희"); 이 생략이 되었지만
이클립스에서 잘 잡아주는 모습입니다.
결과값
Ex04
Arrays 에서 asList
파라미터를 보고 유추가 아니라 <타입>보고 유추
Ex05
//제한된 타입 파라미터
상속받을시 그것의 상위 클래스 or interface 도 안되용
교재 665
s.130501
class Util, BoundedTypeParameterExample
class Util
Number가 가지고 있는 메소드가 보장이 됩니다.
DoubleValue() 사용 가능
compare 가 Number로 유추함
compare d1,d2 비교값을 int로 리턴
equal ->0 , v1 > v2 -> 양수리턴 , v1 < v2 -> 음수가나옴
class BoundedTypeParameterExample
결과값
10 <20 이므로 음수 리턴, 4.5 >3 이므로 양수 리턴
13.6 와일드카드
p03wildcard
Ex01
//list1이 가리키고 있는 instance는 list2와 같음
//list2는 Double 타입의 item을 가질 수 없음
public class Ex02
와일드카드
-제네릭타입<?> : Unbounded Wildcards (제한 없음)
타입 파라미터를 대치하느 ㄴ구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있다.
-제네릭타입<? extends 상위타입> : Upper Bounded Wildcards (상위 클래스 제한)
타입 파라미터 대치하는 구체적은 타입으로상위 타입이나 하위 타입만 올 수 있다.
-제네릭타입<? super 하위타입> : Lower Bounded Wildcards(하위 클래스 제한)
타입 파라미터를 대치하는 구체적인 타입으로 하위타입이나 상위 타입이 올 수 있다.
//<?> , <? extends..> , <? super...>
// 와일드 카드는 파라미터나 리턴타입에 작성됨
// ArrayList List1 = new ArraysList();
ArrayList<? extends Number> list1 = new ArrayList();
//변수 선언시 사용되는 경우는 없음
상위타입제한. 하위타입제한, 제한 없음
public class Ex03
와일드 카드를 안쓰고 avg1,avg2를 만들어보면
결과값
와일드 카드를 사용해서 avg3,avg4를 만들어보면
결과값
public class Ex04
지금 현상태 E에 Number 넣은상태
class Ex04
결과값
Integer는 Number , Double는 Number 이니깐 가능
ArrayList의 addAll() 메소드 사용
public calss Ex05
void forEach(Consumer<? super E> action)
Ex05
결과값
public class Ex06
class Ex06
결과값
챕터13 제네릭 670~ exercises 1~3번
Exercise1. 제네릭에 대한 설명으로 틀린 것은 무엇입니까?
1) 컴파일 시 강한 타입 체크를 할 수 있다.
2) 타입 변환(casting)을 제거한다.
3) 제네릭 타입은 타입 파라미터를 가지는 제네릭 클래스와 인터페이스를 말한다.
4) 제네릭 메소드는 리턴 타입으로 타입 파라미터를 가질 수 없다.
답 4 제네릭 메소드는 리턴 타입으로 타입 파라미터를 가질 수 있다.
클래스+인터페이스 = 타입 이라고 대강 생각해도 무방
int i = 0; , Integer i1 = 3;
public <T> T method1(T param) {
return null;
Exercise2
class ContainerExample
class Container
Exercise3
class ContainerExample
class Container
exercise 4
Util.getValue() 메소느는 첫 번째 매개값으로 Pair 타입과 하위 타입만 받고, 두 번쨰 매개값으로 키값을 받습니다. 리턴값은 키값이 일치할 경우
Pair에 저장된 값을 리턴하고, 일치하지 않으면 null을 리턴하도록 getValue() 제네릭 메소드를 정의
class UtilExample 제네릭 메소드 호출
class Pair 제네릭 타입
class ChildPair 제네릭 타입 상속
class OtherPair 제네릭 타입
class Util 제네릭 메소드 정의
김태희가 일치해서 value값 22 가 나오고, 한가인과 전지현이 같지 않아서 null값 나오게
2021 -09-27 오후수업
13.7 제네릭 타입의 상속과 구현
package p13.generic.p03lecture.p04extends;
public class Ex01 {
Child2Type에서는 T만 상속 받은것 U는 Child2Type에서 사용된 것..?
class My Type {
public void method(T param) { //T가 String에서 든것
}
}
Child3Type에서
Map의 key, value 값이 정해져있다?
'Java 공부 > 자바 공부 (baek)' 카테고리의 다른 글
2021-09-28 람다식~ (0) | 2021.09.28 |
---|---|
2021-09-27 오후 14. 람다식 (0) | 2021.09.27 |
2021-09-24 (0) | 2021.09.24 |
2021-09-23 Map~ (0) | 2021.09.23 |
2021-09-17 Collection Set~ (0) | 2021.09.17 |