모듈에서 다중 제네릭을 사용하는 방법?

Leimenghao

Java에서는 아래와 같은 코드를 사용합니다.

public class GenericTest {
    private static final GenericTest instance = new GenericTest();
    IRequirement requirement;
    public static GenericTest getInstance() {
        return instance;
    }

    public class ClassA {}

    public interface InterfaceA {}

    public void init(IRequirement requirement){
        this.requirement = requirement;
    }

    public interface IRequirement {
        <T extends ClassA & InterfaceA> T supply();
    }

    class ClassB {
        void doSomeThing() {
            ClassA a = requirement.supply();
            InterfaceA ia = requirement.supply();
        }
    }
}

내 필요에 따라 ClassA또는 InterfaceA인스턴스 를 얻을 수 있습니다 . 그러나 kotlin에서는 아래와 같은 코드가 있습니다.

open class ClassA(val name: String) {
    fun function1() {}

    fun function2() {}
}

interface InterfaceA {
    fun iFunction1()
}

class ModuleX private constructor() {
    var requirement: IRequirement? = null

    companion object {
        val instance = ModuleX()
    }

    fun init(requirement: IRequirement) {
        instance.requirement = requirement
    }

    interface IRequirement {
        fun <T> supply(): T where T : ClassA, T : InterfaceA
    }
}

object ClassB {
    inline fun <reified T> doSomeThing() where T : ClassA, T : InterfaceA{
        val require = ModuleX.instance.requirement?.supply<T>()
        require?.function1()
        require?.iFunction1()
    }

    fun doAnotherThing() {
        // IDE give an error when calling supply()
        val require = ModuleX.instance.requirement?.supply()
        require?.function1()
        require?.iFunction1()
    }
}

제네릭의 실제 유형을 지정하거나 제네릭 메소드를 사용해야합니다. 그렇지 않으면 IDE IRequirement에서 ClassB.doAnotherThing()"유형 추론 실패 : 매개 변수 T를 추론 할 수있는 정보가 충분하지 않습니다."라는 오류가 발생하는 경우 와 같이 위 코드에서 를 사용할 수 없습니다 . fun supply () : T 여기서 T : InterfaceA 명시 적으로 지정하십시오. "

내 질문은 : 내 모듈에서 ClassA를 확장하고 InterfaceAd를 구현하는 클래스를 제공해야하지만 모듈이 모듈 외부에 있기 때문에 클래스의 정확한 유형을 알지 못합니다. 이 경우 제네릭을 어떻게 사용해야합니까?

IR42
fun doAnotherThing() {
    val require: Any? = ModuleX.instance.requirement?.supply()
    if (require != null) {
        (require as ClassA).function1()
        (require as InterfaceA).iFunction1()
    }
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

React.FC에서 제네릭을 사용하는 방법

분류에서Dev

Scala에서 제네릭을 사용하는 방법

분류에서Dev

클래스가 다른 유사한 메서드에 제네릭을 사용하는 방법

분류에서Dev

제네릭을 사용하여 구조체에 대해 다른 이름을 정의하는 방법

분류에서Dev

모듈에서 모듈을 사용하는 방법

분류에서Dev

다중 모듈 Maven 프로젝트에서 Maven 어셈블리 플러그인을 사용하는 방법

분류에서Dev

다른 모듈 내에서 서비스 / 모듈을 사용하는 방법은 무엇입니까?

분류에서Dev

제네릭을 사용하는 목록에서 중복 제거

분류에서Dev

node.js 람다에서 요청 모듈을 사용하는 방법

분류에서Dev

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

분류에서Dev

클래스 토큰을 사용하여 제네릭 유형의 중첩 제네릭을 유지하는 방법

분류에서Dev

Colab의 다른 Python 모듈에서 사용자 정의 모듈을 호출하는 방법

분류에서Dev

다른 JS 파일 / 모듈에서이 모듈을 호출 / 사용하는 방법

분류에서Dev

Java 인터페이스에서 제네릭의 제네릭을 사용하는 방법

분류에서Dev

제네릭 메서드에서 제네릭 유형을 확인하는 방법

분류에서Dev

IntelliJ IDEA에서 Maven 다중 모듈 프로젝트의 중첩 모듈을 최상위 모듈로 표시하는 방법은 무엇입니까?

분류에서Dev

유사한 방법에 대한 제네릭을 사용하여

분류에서Dev

인수 필요 클래스에서 제네릭을 사용하는 방법

분류에서Dev

제네릭을 사용하는 다른 유형의 개체에 대해 하나의 RecyclerView 어댑터를 사용하는 방법은 무엇입니까?

분류에서Dev

C # 제네릭 형식을 다른 클래스에 전달하는 방법

분류에서Dev

기본 클래스의 메서드를 사용하여 중첩 클래스에서 제네릭 형식을 반환하는 방법

분류에서Dev

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

분류에서Dev

다른 모듈에서 활동을 호출하는 방법

분류에서Dev

Github에서 모듈을 다운로드하는 방법

분류에서Dev

VUE 3에서 vuex 모듈을 사용하는 방법

분류에서Dev

phantomjs : phantomjs에서 npm 모듈을 사용하는 방법?

분류에서Dev

파이썬에서 gfx 모듈을 사용하는 방법

분류에서Dev

TypeScript에서 모듈 전주곡을 사용하는 방법

분류에서Dev

객체에서 vuejs 모듈을 사용하는 방법

Related 관련 기사

  1. 1

    React.FC에서 제네릭을 사용하는 방법

  2. 2

    Scala에서 제네릭을 사용하는 방법

  3. 3

    클래스가 다른 유사한 메서드에 제네릭을 사용하는 방법

  4. 4

    제네릭을 사용하여 구조체에 대해 다른 이름을 정의하는 방법

  5. 5

    모듈에서 모듈을 사용하는 방법

  6. 6

    다중 모듈 Maven 프로젝트에서 Maven 어셈블리 플러그인을 사용하는 방법

  7. 7

    다른 모듈 내에서 서비스 / 모듈을 사용하는 방법은 무엇입니까?

  8. 8

    제네릭을 사용하는 목록에서 중복 제거

  9. 9

    node.js 람다에서 요청 모듈을 사용하는 방법

  10. 10

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

  11. 11

    클래스 토큰을 사용하여 제네릭 유형의 중첩 제네릭을 유지하는 방법

  12. 12

    Colab의 다른 Python 모듈에서 사용자 정의 모듈을 호출하는 방법

  13. 13

    다른 JS 파일 / 모듈에서이 모듈을 호출 / 사용하는 방법

  14. 14

    Java 인터페이스에서 제네릭의 제네릭을 사용하는 방법

  15. 15

    제네릭 메서드에서 제네릭 유형을 확인하는 방법

  16. 16

    IntelliJ IDEA에서 Maven 다중 모듈 프로젝트의 중첩 모듈을 최상위 모듈로 표시하는 방법은 무엇입니까?

  17. 17

    유사한 방법에 대한 제네릭을 사용하여

  18. 18

    인수 필요 클래스에서 제네릭을 사용하는 방법

  19. 19

    제네릭을 사용하는 다른 유형의 개체에 대해 하나의 RecyclerView 어댑터를 사용하는 방법은 무엇입니까?

  20. 20

    C # 제네릭 형식을 다른 클래스에 전달하는 방법

  21. 21

    기본 클래스의 메서드를 사용하여 중첩 클래스에서 제네릭 형식을 반환하는 방법

  22. 22

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

  23. 23

    다른 모듈에서 활동을 호출하는 방법

  24. 24

    Github에서 모듈을 다운로드하는 방법

  25. 25

    VUE 3에서 vuex 모듈을 사용하는 방법

  26. 26

    phantomjs : phantomjs에서 npm 모듈을 사용하는 방법?

  27. 27

    파이썬에서 gfx 모듈을 사용하는 방법

  28. 28

    TypeScript에서 모듈 전주곡을 사용하는 방법

  29. 29

    객체에서 vuejs 모듈을 사용하는 방법

뜨겁다태그

보관