numaralı döndürülen joker karakter jenerikleri, genellikle bağımsız değişkenleri (ve örneğin C# 'nun tersine dönüş türünde bile) temel alan jenerikleri bulabilir.Dönüş türü
Tipik bir örnek:
Pair<String, String> pair = Pair.of("Hello", "World");
yöntem of
sadece şuna benzer::
Pair<T1, T2>
var
public static <T1, T2> Pair<T1, T2> of(T1 first, T2 second) {
return new Pair<T1, T2>(first, second);
}
Çok güzel.
Pair<Class<?>, String> pair = Pair.of((Class<?>) List.class, "hello");
kod sağlanan aşağıdaki hata (başarısız olur (List.class
doğru türde yapmak için açık döküm dikkat edin.): Ancak, bu artık joker gerektirir aşağıdaki kullanım örneği için çalışıyor) Eclipse tarafından:
içinTip uyumsuzluğu:
TestClass.Pair<Class<?>,String>
TestClass.Pair<Class<capture#1-of ?>,String>
dönüştüğünde olamaz
Ancak açıkça çağıran yapıcı hala beklendiği gibi çalışır:
Pair<Class<?>, String> pair =
new Pair<Class<?>, String>((Class<?>) List.class, "hello");
birisi bu davranış açıklayabilir misiniz? Tasarım gereği mi? istediği mu? Yanlış bir şey mi yapıyorum yoksa derleyicide tasarım/hatada bir hataya rastladım mı?
Yabani tahminim: nasılsa tip bir Class<List>
yapma ve böylece (Pair<Class<?>, String>
den Pair<Class<List>, String>
kadar) dönüşümü başarısız, joker anında derleyici tarafından doldurulur ima görünüyor “? 1-yakalanması #” . Bu doğru mu? Bu etrafında çalışmak için bir yolu var mı? Yapıcı çalışır
public final class Pair<T1, T2> {
public final T1 first;
public final T2 second;
public Pair(T1 first, T2 second) {
this.first = first;
this.second = second;
}
public static <T1, T2> Pair<T1, T2> of(T1 first, T2 second) {
return new Pair<T1, T2>(first, second);
}
}
"nin" imzasını görür bir Çifti Sınıfını genişletir,? Sınıf > türünü genişletir. Son sınıflar için, uzantıları azaltmak için yeterince akıllı gözüküyor, bu yüzden String'de şikayet etmiyor. –
Zed
Hmmm, ilginç. Beni buraya bağladığın için teşekkürler. – jjnguy
Şimdi java8'de çalışıyor. Hedef türü inferene de başvurulur. – ZhongYu