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[_]]]
Saya baru sahaja menghadapi masalah yang sama.
Saya tidak tahu bagaimana anda boleh menggunakan kaedah 1 dan 2 dengan betul, kaedah paling mudah juga
Sebenarnya
Apa yang dikembalikan ialah ManagedChannelBuilder[Any]. Malah, ia tidak sepatutnya ada di sini. Tetapi
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:
Ini adalah definisi asal Jika anda menukarnya kepada ini
def retA: A[_ <: A[_]] = ???
ia sepatutnya baik.
Jadi, ia berfungsi seperti ini
Begitu juga, apabila kembali ke
ManagedChannelBuilder<?>
, hanya.asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]