velog에서 이전한 글 입니다.
Generics
와일드 카드
ArrayList<? extends Product> list = new ArrayList<Tv>();
ArrayList<? extends Product> list = new ArrayList<Audio>();
제네릭에 다형성을 적용한다.
제네릭 타입 명시를 안 할수도 있는데 해야한다면 제네릭 범위를 2개 이상으로 좁혀두고 싶을 때 사용하는 듯 하다. 예시는 인자로 받는 상황을 보여줬다. page 470
제네릭 메서드
static <T extends Fruit> Juice makeJuice(FruitBox<T> box){
String tmp = "";
for(Fruit f : box.getList()) tmp += f+" ";
return new Juice(tmp);
}
메서드 선언부에 제네릭 타입을 지정할 수 있다.
메서드 제네릭은 제네릭 클래스에 정의된 T와 별개로 지역적으로 사용된다.
메세드 제네릭을 사용하면 static 메서드에 타입을 선언하고 사용할 수 있다.
enum
멤버 추가하기
enum Direction2 {
EAST(1, ">"), SOUTH(2,"V"), WEST(3, "<"), NORTH(4,"^");
private final int value;
private final String symbol;
Direction2(int value, String symbol) { // 접근 제어자 private이 생략됨
this.value = value;
this.symbol = symbol;
System.out.printf("initial : %d=%s\n", value, symbol);
}
public int getValue() { return value; }
public String getSymbol() { return symbol; }
}
class Main {
public static void main(String[] args) {
for(Direction2 d : Direction2.values())
System.out.printf("%s=%d%n", d.name(), d.getValue());
}
}
결과
initial : 1=>
initial : 2=V
initial : 3=<
initial : 4=^
EAST=1
SOUTH=2
WEST=3
NORTH=4
생성자가 private이라는 것도 그렇고 enum을 사용하는 시점에 자동으로 생성되는 듯 하다.
main에서 enum을 사용하지 않으면 초기화x
annotation
자바에서 제공하는 표준 annotation@Override, @Deprecated, @SuppressWarnings, @FunctionalInterface.....
표준 annotaion은 컴파일러에게 유용한 정보를 제공한다. 이름 틀린 Override 잡아주기, 경고 무시, 함수 인터페이스 적절한지 등을 봐준다.
'Language > Java' 카테고리의 다른 글
자바) 람다식/ 메서드 참조/ stream (23-05-18) (0) | 2023.07.13 |
---|---|
자바) 함수형 인터페이스/ util.function (23-05-16) (0) | 2023.07.13 |
자바) regex/ generics (23-05-11) (0) | 2023.07.13 |
자바) Map반복/ List ImmutableCollections (23-05-10) (0) | 2023.07.13 |
자바) List/ Stack/ Arrays Comparator/ Comparable Iterator (23-05-09) (0) | 2023.07.13 |