JAVA_generics

0ne·2024년 6월 11일
0

java

목록 보기
7/11

여러개의 type parameter가능

primitive type은 사용 불가; class Type만

당연히 array도 가능하겠죠?

generic method

 public class Utility {

    // 제네릭 메서드
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        String[] stringArray = {"Hello", "World"};

        // 제네릭 메서드 호출
        Utility.<Integer>printArray(intArray);
        Utility.<String>printArray(stringArray);
    }
}

generic class; parameterized class

public class Pair<K, V> {
    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public K getKey() {
        return key;
    }

    public void setKey(K key) {
        this.key = key;
    }

    public V getValue() {
        return value;
    }

    public void setValue(V value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Pair{" +
               "key=" + key +
               ", value=" + value +
               '}';
    }

    public static void main(String[] args) {
        // String과 Integer 타입을 사용하는 Pair 객체
        Pair<String, Integer> pair1 = new Pair<String, Integer>("One", 1);
        System.out.println(pair1);

        // String과 String 타입을 사용하는 Pair 객체
        Pair<String, String> pair2 = new Pair<String, String>("Hello", "World");
        System.out.println(pair2);

        // Integer와 Double 타입을 사용하는 Pair 객체
        Pair<Integer, Double> pair3 = new Pair<Integer, Double>(42, 3.14);
        System.out.println(pair3);
    }
}

binding; T에 가능한 타입을 제약

  1. 제네릭을 특정 인터페이스나 부모 클래스에 바인딩하는 경우:
  • extends 키워드를 사용합니다.
  • 인터페이스나 부모 클래스에 바인딩되면 제네릭 타입이 특정 인터페이스나 클래스의 서브타입이어야 합니다.
public class MyClass<T extends Comparable> {
    // 이 코드는 T가 Comparable 타입만 가능하도록 강제합니다.
}
  1. 제네릭을 여러 타입에 바인딩하는 경우:
  • 여러 인터페이스에 바인딩할 수 있습니다.
  • 하나의 클래스에만 바인딩할 수 있으며, 클래스는 항상 첫 번째로 나와야 합니다.
public class MyClass<T extends Employee & Comparable & Iterable> {
    // 이 코드는 T가 Employee의 서브클래스이면서 동시에 Comparable 및 Iterable 인터페이스를 구현해야 한다는 것을 강제합니다.
    // 확장된 클래스(Employee)는 항상 첫 번째로 나와야 합니다.
}
profile
@Hanyang univ(seoul). CSE

0개의 댓글