Oracle'ın web sitesinde Java'nın tür silinmesini okudum .
Tip silme ne zaman gerçekleşir? Derleme zamanında mı çalışma zamanında mı? Sınıf ne zaman yüklenir? Sınıf ne zaman somutlaştırılır?
Birçok site (yukarıda belirtilen resmi öğretici dahil) tür silme derleme zamanında gerçekleştiğini söylüyor. Tür bilgileri derleme zamanında tamamen kaldırılırsa, tür bilgisi veya yanlış tür bilgisi olmadan jenerik kullanan bir yöntem çağrıldığında JDK tür uyumluluğunu nasıl denetler?
Aşağıdaki örneği düşünün: Say sınıfının Abir yöntemi var empty(Box<? extends Number> b). A.javaSınıf dosyasını derliyor ve alıyoruz A.class.
public class A {
public static void empty(Box<? extends Number> b) {}
}
public class Box<T> {}
Şu anda başka bir sınıf oluşturmak Byöntemi çağırır emptyolmayan bir parametreli bağımsız değişken (ham tip): empty(new Box()). Biz derlemek B.javaile A.classsınıf yolunda, Javac bir uyarı yükseltmek için akıllı yeterlidir. Yani A.class sahiptir buna depolanan bazı tür bilgileri.
public class B {
public static void invoke() {
// java: unchecked method invocation:
// method empty in class A is applied to given types
// required: Box<? extends java.lang.Number>
// found: Box
// java: unchecked conversion
// required: Box<? extends java.lang.Number>
// found: Box
A.empty(new Box());
}
}
Benim tahminim, sınıf yüklendiğinde tür silme gerçekleşir, ancak bu sadece bir tahmin. Peki ne zaman oluyor?