Maison  >  Questions et réponses  >  le corps du texte

java - scala builder pattern 泛型函数调用

黄舟黄舟2714 Il y a quelques jours455

répondre à tous(1)je répondrai

  • 阿神

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

    Je viens de rencontrer le même problème.
    Je ne sais pas comment utiliser correctement les méthodes 1 et 2, la méthode la plus simple est aussi

    asInstanceOf[ManagedChannelBuilder[_]]
    

    En fait

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

    Ce qui est renvoyé est ManagedChannelBuilder[Any]. En fait, ça ne devrait pas être Any ici. Mais un

    T extends ManagedChannelBuilder<T>
    

    Ensuite, nameResolverFactory renvoie ce T comme Any.
    Ensuite, il s'agit d'appeler la méthode build de Any, qui ne peut évidemment pas passer la compilation.

    J'espère qu'il existe une meilleure façon~

    =============================================== === ====
    Mise à jour

    Simplifiez le problème :

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

    C'est la définition originale. Si vous la changez par ceci
    def retA: A[_ <: A[_]] = ???
    ça devrait aller.

    Donc, ça marche

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

    De même, lors de votre retour à ManagedChannelBuilder<?>, juste
    .asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]

    répondre
    0
  • Annulerrépondre