Rumah  >  Soal Jawab  >  teks badan

java - scala builder pattern 泛型函数调用

黄舟黄舟2714 hari yang lalu456

membalas semua(1)saya akan balas

  • 阿神

    阿神2017-04-18 10:12:09

    Saya baru sahaja menghadapi masalah yang sama.
    Saya tidak tahu bagaimana anda boleh menggunakan kaedah 1 dan 2 dengan betul, kaedah paling mudah juga

    asInstanceOf[ManagedChannelBuilder[_]]
    

    Sebenarnya

    public static ManagedChannelBuilder<?> forTarget(String target) {
        return ManagedChannelProvider.provider().builderForTarget(target);
    }
    

    Apa yang dikembalikan ialah ManagedChannelBuilder[Any]. Malah, ia tidak sepatutnya ada di sini. Tetapi

    T extends ManagedChannelBuilder<T>
    

    Kemudian nameResolverFactory mengembalikan T ini sebagai Any.
    Kemudian ia menjadi memanggil kaedah binaan Any, yang jelas tidak dapat melepasi kompilasi.

    Saya harap ada cara yang lebih baik~

    ============================================ === ====
    Kemas kini

    Ringkaskan masalah:

    class A[T <: A[T]] {
        def retA: A[_] = ???
        
        def retT: T = ???
    }
        
    class B extends A[B]
        
    (new B).retA.retT

    Ini adalah definisi asal Jika anda menukarnya kepada ini
    def retA: A[_ <: A[_]] = ???
    ia sepatutnya baik.

    Jadi, ia berfungsi seperti ini

    (new B).retA.asInstanceOf[A[_ <: A[_]]].retT.retT....

    Begitu juga, apabila kembali ke ManagedChannelBuilder<?>, hanya
    .asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]

    balas
    0
  • Batalbalas