java - scala builder pattern 泛型函数调用
黄舟
黄舟 2017-04-18 10:10:09
0
1
472
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(1)
阿神

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[_]]]

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!