>source

public interface Page<T> {
  T nextPage();
}

그리고 구현입니다

public class ConcretePageA implements Page<TypeA> {
  public TypeA nextPage() {
    //do stuff
  }
}

그러면 다음을 사용하는 인터페이스가 있습니다.페이지

public interface Source {
  <T> int getData(Page<T> page)
}

그리고 그 구현

public class ConcreteSourceA implements Source {
  public int getData(Page<TypeA> page) {   //error: getData in ConcreteSourceA clashes with getData in Source
    //do stuff
  }
}

이것도 시도했지만 작동하지 않습니다

public class ConcreteSourceA implements Source {
  public <TypeA> getData(Page<TypeA> page) { //error: expect com.foo.TypeA but got TypeA
    //do stuff
  }
}

위의 작업을 수행하면 다음과 같은 컴파일 오류가 발생합니다.

getData in ConcreteSourceA clashes with getData in Source

내가 뭔가 잘못하고 있다는 것을 알고 있지만 다른 유형을 사용하는 여러 구현을 유지하면서 어떻게 고칠 수 있습니까?

내가 처음부터 이 일을 잘못하고 있는 걸까요? 제네릭이 이에 대한 올바른 방법이 아닙니까?

  • 답변 # 1

    당신이 만들고 싶어하는 것 같습니다원천일반적인페이지다음과 같습니다.

    public interface Source<T> {
      int getData(Page<T> page);
    }
    

    그러면 다음과 같은 특정 전문화만 구현하는 구현을 정의할 수 있습니다.

    public class ConcreteSourceA implements Source<TypeA> {
      public int getData(Page<TypeA> page) {
        //do stuff
        return 0;
      }
    }
    

  • 이전 winforms : 클릭한 레이블에서 PictureBox가 업데이트되지 않음
  • 다음 마운트 대상이 삭제될 때까지 efs가 대기하도록 boto3에 사용자 지정 웨이터를 만듭니다.