Rumah > Soal Jawab > teks badan
阿神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[_]]]