Java에서 제네릭을 사용한 정적 다형성

가로 질러 가다_

나는 컬렉션을 재귀 적으로 파헤쳐 서 찾은 첫 번째 Integer를 인쇄 할 수있는 깨끗한 코드를 만들고 싶었습니다. 접근 방식은 다음과 같은 C ++ 배경에서 왔습니다.

class Test {
static void print(Integer i) {
  System.out.println(i);
}

static <T> void print(ArrayList<T> arr) {
  T entry= arr.at(0);
  Test.print (entry);
}

static void Test() {
    ArrayList<ArrayList<Integer>> arrayOfArrayOfInt= create();
    print( arrayOfArrayOfInt );
}
}

불행히도 이것은 작동하지 않습니다.

한 가지 대안은 정적 다형성을 포기하고 print (Object o) 함수를 생성 한 다음 여러 instanceof 검사를 수행하여 올바른 동작으로 분기하는 것입니다. 이것이 Java의 유형 삭제로 인해 수행 할 수있는 유일한 방법입니까, 아니면 더 우아한 접근 방식이 있습니까?

폴 보딩 턴

다음 메소드는 재귀 적으로를 파고 들어서 처음 찾은 것을 포함 하는를 Object반환 하거나 찾을 수없는 경우 반환합니다.OptionalIntegerOptional.empty()

static Optional<Integer> firstInt(Object o) {
    if (o instanceof Integer)
        return Optional.of((Integer) o);
    if (o instanceof int[]) {
        int[] array = (int[]) o;
        return array.length > 0 ? Optional.of(array[0]) : Optional.empty();
    }
    if (o instanceof Object[])
        return firstInt(Arrays.asList((Object[]) o));
    if (o instanceof Iterable) {
        for (Object o2 : (Iterable<?>) o) {
            Optional<Integer> result = firstInt(o2);
            if (result.isPresent())
                return result;
        }
    }
    return Optional.empty();
}

당신은 할 수 다형성을 사용하여이 작업을 수행하지만 인터페이스를 만들어야 할 것 Searchable같은를

interface Searchable {
    Optional<Integer> search();
}

그런 다음 검색 할 수있는 모든 구체적인 유형에 대한 래퍼 클래스를 만듭니다. 예를 들면 :

public final class SearchableList<T extends Searchable> extends AbstractList<T> implements Searchable {

    private final List<T> list;

    SearchableList(List<T> list) {
        this.list = list;
    }

    // rest omitted
}

그러나 이것은 복잡한 엉망이 될 것이며 instanceof대신 수표를 선호하여 피할 것 입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

제네릭 Dart 메서드에서 제네릭 유형 T에 대한 제약을 적용하는 방법

분류에서Dev

비 제네릭 정적 팩토리 메서드를 구현하여 문자열 입력에서 다양한 제네릭 클래스를 만듭니다 ( "동적"유형을 사용하지 않음).

분류에서Dev

Scala에서 제네릭을 사용하여 Java 정적 메서드 호출

분류에서Dev

구현에서 사용 된 제네릭 (적용된 유형)에 따라 인터페이스의 한 구현을 사용합니다.

분류에서Dev

유형 정의에서 제네릭을 사용할 때 Dart에서 런타임 예외가 발생합니다.

분류에서Dev

Java의 제네릭 배열, 모두 동일한 유형을 적용합니까?

분류에서Dev

제네릭을 사용한 Java 정렬 컬렉션

분류에서Dev

제네릭의 지정되지 않은 유형이 비 제네릭 메서드에 대한 유형 안전성을 파괴하는 이유

분류에서Dev

제네릭 유형에 대해 typeof 값을 사용하는 함수에 대한 인터페이스 정의

분류에서Dev

Typescript에서 제네릭을 사용하여 동일한 인수 목록 적용

분류에서Dev

Swift 용 LLDB : 제네릭 유형에 대한 사용자 정의 유형 요약

분류에서Dev

특정 유형에 대한 특성을 구현하는 제네릭 유형에 대한 특성 구현

분류에서Dev

복잡한 제네릭 유형을 재귀 적으로 적용

분류에서Dev

강제 제네릭은 TypeScript에서 속성을 구현합니다 (제네릭에 대한 제한).

분류에서Dev

제네릭 열거 속성 같은 비 정적 방법을 사용하여

분류에서Dev

제네릭 형식에서 상속 할 때 중첩 형식을 사용하려면 부모 형식 한정을해야하는 이유는 무엇입니까?

분류에서Dev

동적 제네릭 유형으로 제네릭을 테스트하는 Java

분류에서Dev

Java 제네릭, 수퍼 또는 하위 유형을 적용하는 방법

분류에서Dev

여러 제네릭 유형 매개 변수에 동일한 제약 조건을 적용 할 수 있습니까?

분류에서Dev

제네릭 유형에 대해 kotlin에서 리플렉션을 사용하여 정적 필드 값 가져 오기

분류에서Dev

속성 유형이 제네릭 유형을 포함하는 경우 제네릭 클래스의 속성에 제네릭 JsonConverter를 적용하는 방법은 무엇입니까?

분류에서Dev

목록에 하위 유형 다형성 및 제네릭을 사용하는 방법은 무엇입니까?

분류에서Dev

C #에서 제네릭 형식을 매개 변수로 사용

분류에서Dev

C #에서 제네릭 형식 인수를 지정할 때 '동적'을 사용하는 방법은 무엇입니까?

분류에서Dev

제네릭을 사용한 람다 식

분류에서Dev

최종 또는 템플릿을 사용한 정적 다형성?

분류에서Dev

정적 제네릭 메서드에서 T에 대한 기본 유형을 설정하는 방법은 무엇입니까?

분류에서Dev

제네릭 유형을 사용한 제네릭 컬렉션 생성

분류에서Dev

제네릭 요소에 대한 반복기에서 제네릭 형식을 빌드 할 수 없습니다.

Related 관련 기사

  1. 1

    제네릭 Dart 메서드에서 제네릭 유형 T에 대한 제약을 적용하는 방법

  2. 2

    비 제네릭 정적 팩토리 메서드를 구현하여 문자열 입력에서 다양한 제네릭 클래스를 만듭니다 ( "동적"유형을 사용하지 않음).

  3. 3

    Scala에서 제네릭을 사용하여 Java 정적 메서드 호출

  4. 4

    구현에서 사용 된 제네릭 (적용된 유형)에 따라 인터페이스의 한 구현을 사용합니다.

  5. 5

    유형 정의에서 제네릭을 사용할 때 Dart에서 런타임 예외가 발생합니다.

  6. 6

    Java의 제네릭 배열, 모두 동일한 유형을 적용합니까?

  7. 7

    제네릭을 사용한 Java 정렬 컬렉션

  8. 8

    제네릭의 지정되지 않은 유형이 비 제네릭 메서드에 대한 유형 안전성을 파괴하는 이유

  9. 9

    제네릭 유형에 대해 typeof 값을 사용하는 함수에 대한 인터페이스 정의

  10. 10

    Typescript에서 제네릭을 사용하여 동일한 인수 목록 적용

  11. 11

    Swift 용 LLDB : 제네릭 유형에 대한 사용자 정의 유형 요약

  12. 12

    특정 유형에 대한 특성을 구현하는 제네릭 유형에 대한 특성 구현

  13. 13

    복잡한 제네릭 유형을 재귀 적으로 적용

  14. 14

    강제 제네릭은 TypeScript에서 속성을 구현합니다 (제네릭에 대한 제한).

  15. 15

    제네릭 열거 속성 같은 비 정적 방법을 사용하여

  16. 16

    제네릭 형식에서 상속 할 때 중첩 형식을 사용하려면 부모 형식 한정을해야하는 이유는 무엇입니까?

  17. 17

    동적 제네릭 유형으로 제네릭을 테스트하는 Java

  18. 18

    Java 제네릭, 수퍼 또는 하위 유형을 적용하는 방법

  19. 19

    여러 제네릭 유형 매개 변수에 동일한 제약 조건을 적용 할 수 있습니까?

  20. 20

    제네릭 유형에 대해 kotlin에서 리플렉션을 사용하여 정적 필드 값 가져 오기

  21. 21

    속성 유형이 제네릭 유형을 포함하는 경우 제네릭 클래스의 속성에 제네릭 JsonConverter를 적용하는 방법은 무엇입니까?

  22. 22

    목록에 하위 유형 다형성 및 제네릭을 사용하는 방법은 무엇입니까?

  23. 23

    C #에서 제네릭 형식을 매개 변수로 사용

  24. 24

    C #에서 제네릭 형식 인수를 지정할 때 '동적'을 사용하는 방법은 무엇입니까?

  25. 25

    제네릭을 사용한 람다 식

  26. 26

    최종 또는 템플릿을 사용한 정적 다형성?

  27. 27

    정적 제네릭 메서드에서 T에 대한 기본 유형을 설정하는 방법은 무엇입니까?

  28. 28

    제네릭 유형을 사용한 제네릭 컬렉션 생성

  29. 29

    제네릭 요소에 대한 반복기에서 제네릭 형식을 빌드 할 수 없습니다.

뜨겁다태그

보관