Java에서 제네릭 및 유형 추론 사용 문제

JohnQ

이 기간에 저는 일종의 추상화가 필요한 프로젝트를 진행하고 있지만 Java 제네릭 및 유형 추론과 관련된 몇 가지 문제를 해결하는 방법을 모릅니다.

이것은 소스 코드의 단순화 된 아키텍처입니다.

public abstract class BaseDataset
{
    // Some data
    // Some methods
}

public class DerivedDataset1 extends BaseDataset
{
    // Some data
    // Implementations of some BaseDataset methods
    // Some additional methods
}

public class DerivedDataset2 extends BaseDataset
{
    // Some data
    // Implementations of some BaseDataset methods
    // Some additional methods
}

public interface BaseMeasure<T extends BaseDataset>
{
    public float evaluate(T dataset);
}

public class DerivedMeasure1 implements BaseMeasure<DerivedDataset1>
{
    @Override
    public float evaluate(DerivedDataset1 dataset)
    {
        // evaluate some measure using DerivedDataset1 methods
        return the evaluated measure;
    }
}

public class DerivedMeasure2 implements BaseMeasure<DerivedDataset2>
{
    @Override
    public float evaluate(DerivedDataset1 dataset)
    {
        // evaluate some measure using DerivedDataset2 methods
        return the evaluated measure;
    }
}

public class SocialNetworkBuilder
{
    public <T extends BaseDataset> void build(T dataset, BaseMeasure<T> measure)
    {
        float weight = measure.evaluate(dataset);

        // ...
    }
}

내 문제는 내 메인 클래스에서 다음과 같이 작성하는 것입니다.

public class Application
{
    public static void main(String [] args)
    {
        BaseDataset dataset = new DerivedDataset1();
        BaseMeasure<? extends BaseDataset> measure = new DerivedMeasure1();
        SocialNetworkBuilder socialNetworkBuilder = new SocialNetworkBuilder();
        socialNetworkBuilder.build(dataset, measure);
    }
}

Eclipse에서 "SocialNetworkBuilder 유형의 build (T, BaseMeasure) 메소드는 인수 (BaseDataset, BaseMeasure)에 적용 할 수 없습니다."라는 오류가 표시됩니다.

문제는 "build"방법이 데이터 세트와 측정 값이 동일한 유형 T인지 확인해야한다는 것입니다.

다음과 같이하면 :

public class Application
{
    public static void main(String [] args)
    {
        BaseDataset dataset = new DerivedDataset1();
        BaseMeasure<? extends BaseDataset> measure = new DerivedMeasure1();
        SocialNetworkBuilder socialNetworkBuilder = new SocialNetworkBuilder();
        socialNetworkBuilder.build((DerivedDataset1) dataset, (DerivedMeasure1) measure);
    }
}

작동하지만 컴파일 타임에 "dataset"및 "measure"인스턴스의 파생 유형을 모르기 때문에 이런 방식으로 문제를 해결할 수 없습니다. "dataset"및 "measure"는 런타임에 제공된 일부 매개 변수에 따라 인스턴스화되어야합니다.

런타임에 "measure"및 "dataset"변수를 인스턴스화하고 "build"메서드를 호출 할 수 있어야합니다.

이 문제를 해결할 아이디어가 있습니까?

감사합니다.

isnot2bad

다음과 같이 변경하면 애플리케이션이 컴파일됩니다.

public class Application
{
    public static void main(String [] args)
    {
        DerivedDataset1 dataset = new DerivedDataset1();
        BaseMeasure<DerivedDataset1> measure = new DerivedMeasure1();
        SocialNetworkBuilder socialNetworkBuilder = new SocialNetworkBuilder();
        socialNetworkBuilder.build(dataset, measure);
    }
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

제네릭 팩토리에 대한 제네릭 및 유형 추론

분류에서Dev

제네릭에서 유형 추론

분류에서Dev

사용 된 유형 제네릭 중 하나에서 제네릭 유형 유추

분류에서Dev

연관 유형이있는 사용 프로토콜에서 제네릭 추론

분류에서Dev

중첩 유형에서 제네릭 유형 추론

분류에서Dev

Typescript 및 유형 추론 : 유효성 검사 문제

분류에서Dev

다른 제네릭 클래스에서 유형 매개 변수로도 사용될 때 제네릭 유형을 추론 할 수 없습니다.

분류에서Dev

반환 유형 및 매개 변수에 제네릭 사용

분류에서Dev

함수 콜백에서 제네릭 유형 인수 추론

분류에서Dev

인터페이스에서 제네릭 유형 추론

분류에서Dev

typescript에서 중첩 제네릭 유형을 추론합니까?

분류에서Dev

dotnetcore에서 제네릭 유형 사용

분류에서Dev

제네릭 형식 변수에 지역 형식 유추 및 contravariance

분류에서Dev

Java6, Guava, 제네릭, 유형 추론

분류에서Dev

Scala 메서드 추론 된 제네릭 유형

분류에서Dev

제네릭 유형 추론 단순화

분류에서Dev

Typescript 제네릭 : 함수 인수 유형에서 유형을 추론합니까?

분류에서Dev

제네릭 유형에서 반환 유형을 추론합니까?

분류에서Dev

TypeScript의 제네릭 유형에서 제네릭 유형을 추론하는 방법이 있습니까?

분류에서Dev

제네릭을 사용하여 유형을 추론하는 Typescript 컴파일러

분류에서Dev

Typescript : 제네릭 유형에 대한 오버로딩 및 검사

분류에서Dev

mvc razor에서 제네릭 유형이 자동으로 추론되는 방법

분류에서Dev

Java에서 String.format과 함께 제네릭 유형 사용

분류에서Dev

Haskell Typeclass 유형 제약 및 추론

분류에서Dev

제네릭 + 공용체 유형 [Typescript]를 사용하여 클래스에서 추상 메소드를 구현할 때 유형 안전성 문제

분류에서Dev

클래스 제네릭 속성 메서드 반환 유형 추론

분류에서Dev

자바 제네릭 메소드 유형 추론에 대한 혼동

분류에서Dev

관련 유형 및 제네릭 사용 오류

분류에서Dev

공용체로 입력 된 함수에서 인수 및 반환 유형이 제대로 추론되지 않음

Related 관련 기사

  1. 1

    제네릭 팩토리에 대한 제네릭 및 유형 추론

  2. 2

    제네릭에서 유형 추론

  3. 3

    사용 된 유형 제네릭 중 하나에서 제네릭 유형 유추

  4. 4

    연관 유형이있는 사용 프로토콜에서 제네릭 추론

  5. 5

    중첩 유형에서 제네릭 유형 추론

  6. 6

    Typescript 및 유형 추론 : 유효성 검사 문제

  7. 7

    다른 제네릭 클래스에서 유형 매개 변수로도 사용될 때 제네릭 유형을 추론 할 수 없습니다.

  8. 8

    반환 유형 및 매개 변수에 제네릭 사용

  9. 9

    함수 콜백에서 제네릭 유형 인수 추론

  10. 10

    인터페이스에서 제네릭 유형 추론

  11. 11

    typescript에서 중첩 제네릭 유형을 추론합니까?

  12. 12

    dotnetcore에서 제네릭 유형 사용

  13. 13

    제네릭 형식 변수에 지역 형식 유추 및 contravariance

  14. 14

    Java6, Guava, 제네릭, 유형 추론

  15. 15

    Scala 메서드 추론 된 제네릭 유형

  16. 16

    제네릭 유형 추론 단순화

  17. 17

    Typescript 제네릭 : 함수 인수 유형에서 유형을 추론합니까?

  18. 18

    제네릭 유형에서 반환 유형을 추론합니까?

  19. 19

    TypeScript의 제네릭 유형에서 제네릭 유형을 추론하는 방법이 있습니까?

  20. 20

    제네릭을 사용하여 유형을 추론하는 Typescript 컴파일러

  21. 21

    Typescript : 제네릭 유형에 대한 오버로딩 및 검사

  22. 22

    mvc razor에서 제네릭 유형이 자동으로 추론되는 방법

  23. 23

    Java에서 String.format과 함께 제네릭 유형 사용

  24. 24

    Haskell Typeclass 유형 제약 및 추론

  25. 25

    제네릭 + 공용체 유형 [Typescript]를 사용하여 클래스에서 추상 메소드를 구현할 때 유형 안전성 문제

  26. 26

    클래스 제네릭 속성 메서드 반환 유형 추론

  27. 27

    자바 제네릭 메소드 유형 추론에 대한 혼동

  28. 28

    관련 유형 및 제네릭 사용 오류

  29. 29

    공용체로 입력 된 함수에서 인수 및 반환 유형이 제대로 추론되지 않음

뜨겁다태그

보관