O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Item 28 바운드 와일드 카드를 사용해서 API의 유연성을 높이자

447 visualizações

Publicada em

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Item 28 바운드 와일드 카드를 사용해서 API의 유연성을 높이자

  1. 1. Item 28. 바운드 와일드 카드를 사용해서 API 의 유연성을 높이자 Chapter 5. 제네릭
  2. 2. API 유연성이 필요한 경우 • Stack 클래스의 한계 public class Stack<E> { … public void pushAll(Iterable<E> src){ for(E e : src) push(e); } public void popAll(Collection<E> dst) { while(!isEmpty()) dst.add(pop()); } … }
  3. 3. API 유연성이 필요한 경우 • Stack 클래스의 한계 → Bounded wild card public class Stack<E> { … public void pushAll(Iterable<? extends E> src){ for(E e : src) push(e); } public void popAll(Collection<? super E> dst) { while(!isEmpty()) dst.add(pop()); } … }
  4. 4. 언제 어떤 와일드 카드 타입을 사용할까? • PESC Producer – extends, Consumer - super public class Stack<E> { … public void pushAll(Iterable<? extends E> src){ for(E e : src) push(e); } public void popAll(Collection<? super E> dst) { while(!isEmpty()) dst.add(pop()); } … }
  5. 5. Producer–extends, Consumer– super (PESC) static <E> E reduce(List<E> list, Function<E> f, E initVal)
  6. 6. Producer–extends, Consumer– super (PESC) public static <E> Set<E> union(Set<E> s1, Set<E> s2)
  7. 7. Producer–extends, Consumer– super (PESC) public static <T extends Comparable<T>> T max(List<T> list)
  8. 8. 타입 매개변수와 와일드 카드 public static <E> void swap(List<E> list, int i, int j); public static void swap(List<?> list, int i, int j);
  9. 9. 타입 매개변수와 와일드 카드 • 와일드 카드 타입을 잡아내는 private helper method를 사용 public static void swap(List<?> list, int i, int j) { swapHelper(list, i, j); } private static <E> void swapHelper(List<E> list, int i, int j) { list.set(i, list.set(j, list.get(i))); }
  10. 10. 요약. • 바운드 와일드 카드를 사용해서 API의 유연성을 높이자 • Producer–extends, Consumer– super (PESC)를 생각해서 작성하 자 – 모든 Comparable과 Comparator는 소비자

×