Dökme olduğu teknik olarak mümkün. Javac tarafından durumunuzda böyle olmadığı kolayca kanıtlanamaz ve JLS aslında bunu geçerli bir Java programı olarak tanımlar, bu nedenle bir hatayı işaretlemek yanlış olur.
Çünkü Listbir arayüzdür. Yani Dateaslında burada Listolduğu gibi gizlenmiş bir alt sınıf olabilir List- ve sonra döküm Datemükemmel tamam olacaktır. Örneğin:
public class SneakyListDate extends Date implements List<Foo> {
...
}
Ve sonra:
List<Foo> list = new SneakyListDate();
Date date = (Date) list; // This one is valid, compiles and runs just fine
Bu tür bir senaryoyu saptamak her zaman mümkün olmayabilir, çünkü örneğin örneğin bir yöntemden geliyorsa çalışma zamanı bilgileri gerektirecektir. Ve olsa bile, derleyici için çok daha fazla çaba gerektirecektir. Derleyici, sınıf ağacının hiç eşleşememesi nedeniyle kesinlikle imkansız olan dökümleri önler. Görüldüğü gibi burada durum böyle değil.
JLS kodunuzun geçerli bir Java programı olmasını gerektirdiğini unutmayın. In 5.1.6.1. İzin verilen Daralma Referans Dönüşümü :
Bir daraltma referans dönüşüm referans türünden mevcut Sbaşvuru tipi için T, eğer tüm aşağıdakilerden olan gerçek :
- [...]
- Bir aşağıdaki durumların geçerli :
- [...]
Sbir arabirim türüdür, Tbir sınıf türüdür ve Tbir finalsınıfı adlandırmaz.
Derleyici Yani bile olabilir davanız aslında kanıtlanabilir imkansız olduğunu anlamaya JLS Geçerli Java programı olarak tanımlar çünkü bayrak bir hata izin verilmez.
Yalnızca bir uyarı gösterilmesine izin verilir.
ListBurada özel bir şey yok.Date d = (Date) new Object();