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[_]]]
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
En fait
Ce qui est renvoyé est ManagedChannelBuilder[Any]. En fait, ça ne devrait pas être Any ici. Mais un
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 :
C'est la définition originale. Si vous la changez par ceci
def retA: A[_ <: A[_]] = ???
ça devrait aller.
Donc, ça marche
De même, lors de votre retour à
ManagedChannelBuilder<?>
, juste.asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]