>

제네릭을 처음 사용하고 아래와 같은 방법이 있습니다

public <T1, T2> void test(Details<T1, T2> reportDetails, List<T1> ent1, List<T2> ent2)
Converter<? super T1, Box> conv1
 Converter<? super T2, Box> conv2
converter is of type org.springframework.core.convert.converter

이것은 실제로 보고서를 다운로드하기위한 것이며, T1은 하나의 보고서이고 T2는 또 다른 보고서이며 더 많은 테이블이 추가되면 새로운 유형을 추가 할 필요가 없도록보다 일반적인 것이기를 원합니다. T1, T2가 동적이어야합니다 .T1과 T2를 모두 서버로 사용하여 나중에 필요한 경우 새 유형 (T3)을 추가 할 필요가없는 일반적인 하나를 원합니다. 그렇게하는 방법이 있습니까?

보다 명확하게 : T1과 T2가 없어도 하나만 가질 수 있도록 T1과 T2를 모두 저장할 수있는 일반화 된 변환기 객체 목록을 만들 수있는 방법이 필요합니다.

  • 답변 # 1

    질문이 불분명합니다.

    기본적으로 사용한 서명은 위의 방법이 일반적이므로 T1 및 T2에 대해 두 가지 유형을 모두 지원한다는 것을 의미합니다.

    "두 가지"콘크리트 유형의 조합의 경우 위의 서명이 작동 할 수 있습니다.

    더 많은 유형의 유형을 원하면 서명을 향상시켜야합니다. 더 이해하기 위해 Tuples에 대해 읽을 수 있습니다.

    수정 : 올바르게 이해하면 '보고서'를 유형으로 정의한 다음 내 방식을 세워야합니다.

    public interface Report {    
        void getReportData(/*any parameters here */);
    }
    
    

    정의한 방법은 다음과 같습니다.

    <T1 extends Report, T2 extends Report> void test(Details<T1, T2> reportDetails, List<T1> ent1, List<T2> ent2);
    
    

    그리고 변환기는 모두 다음과 같이 정의 될 수있는 곳에 보관 될 것입니다 :

    List<Converter<T extends Report, Base>>
    
    

    이것이 당신의 뒤를 바라고 있습니다. 이것이 당신이 찾고있는 것이라면 제네릭의 경계에 약간의 시간을 보내야한다고 생각합니다.

  • 답변 # 2

    <? extends T> 를 시험해 주시겠습니까?  그리고 <? super T>  . 무한한 와일드 카드는 다음과 같으며 기본적으로 의미합니다. 제네릭은 모든 유형이 될 수 있습니다. 바운드 와일드 카드 (또는)는 특정 유형을 확장해야하거나 (상한이라고도 함) 특정 유형의 조상이어야합니다 (하한이라고 함). 자세한 정보.

  • 이전 reactjs : TypeScript 및 React-Router 4, 5 또는 6을 사용하여 보호 /개인 경로를 다시 작성하는 방법은 무엇입니까?
  • 다음 python - 요청 및 psycopg2를 사용하여 Postgres에서 Json 생성/삽입