Java, artık tür silme işlemini gerçekleştirmesine gerek kalmayacak şekilde nasıl geliştirilebilir?


16

Jenerik resmi Java öğretici tipi silinti açıklıyor ve neden derleyici eklendi:

Genel bir tür başlatıldığında, derleyici bu türleri tür silme adı verilen bir teknikle çevirir - derleyicinin sınıf parametreleri veya tür veya yöntemdeki tür bağımsız değişkenleriyle ilgili tüm bilgileri kaldırdığı bir işlem. Tür silme, jenerikler kullanan Java uygulamalarının Java kitaplıkları ve jeneriklerden önce oluşturulan uygulamalarla ikili uyumluluğu sürdürmesini sağlar.

Bu büyük olasılıkla pragmatik bir yaklaşım veya belki de en az acı veren yaklaşımdı. Bununla birlikte, jenerikler endüstride yaygın olarak desteklendiğine göre, tip silmeye ihtiyacımız olmaması için ne yapılabilir? Geriye dönük uyumluluğu bozmaya gerek kalmadan yapılabilir mi, yoksa uygulanabilir mi?

Yukarıdaki alıntıdaki son ifade kendi kendine referans haline geldi mi? Yani: "tür silme, jenerikleri kullanan Java uygulamalarının Java kitaplıkları ve tür silme gerçekleştiren Java sürümleriyle oluşturulan uygulamalar ile ikili uyumluluğu sürdürmesini sağlar."


1
Güneş 1.4 EOL'ed. IBM hala platformlarında 1.4'ü destekliyor.

@ ThorbjørnRavnAndersen: Ve en azından babamın bodrumunda oturan platform için 1.5 yok .
Jörg W Mittag

@ ThorbjørnRavnAndersen Sadece bu değil, JVM'nin daha önceki sürümleri için genişletilmiş destek satın alabilirsiniz. Son olarak oldukça pahalı olmasına rağmen duydum.
maple_shaft

1
Buradaki hiçbirimiz kristal bir topa sahip değiliz, bu yüzden cevaplanamaz. Belki de "Gelecek olacak mı?"
Sorusundan

@ JörgWMittag aslında 2012'de üretim için kullanılan bir platform olabilir mi?

Yanıtlar:


7

Kullanım ömrü sonu, Java Geliştirme Araç Seti ve Java Çalışma Zamanı Ortamı için geçerlidir. Ve sadece Oracle (Sun) sürümleri. Ancak üçüncü taraflarca yazılan başvurular için geçerli değildir. Amaç, JVM'de hiç çalışmamış olan kodu asla kırmamaktır, bu nedenle Java'nın tür silme işlemini durdurması pek olası değildir.

Elbette C #, tip silmeden geriye dönük uyumlu bir şekilde jenerikleri de tanıttı, ancak temel olarak tüm toplama sınıflarını çoğaltmak anlamına geliyordu. Sanırım Java tasarımcılarının yapmak istemedikleri şey ve bu yüzden neden ilk etapta silme işlemini seçtikleri. Değer türleri olmadan, tür silinmemiş jeneriklerin avantajı o kadar büyük değildir.


6
OpenJDK ekibi yeniden birleşik Generics'e bakmayı tartıştı, zaman çerçevesi? Büyük olasılıkla Java 9'un zaman çerçevesi sırasında ciddiye bakılması ve teknik olarak uygun olması durumunda, Java 10'un zaman çerçevesinde sunulur. Ama bu benim açımdan ciddi bir açıklama.
Martijn Verburg

Tür silme işlemi derleyici tarafından yapılır, JVM tarafından değil. Birleştirilmiş jeneriklerin tanıtılması yeni bir derleyici ve yeni JVM gerektirecektir, ancak muhtemelen eski kodla çalışacaklardır.
Gabe

@Gabe: Açıkçası yeni sürümde tanıtılacaklar, bu yüzden yeni derleyici ve yeni JVM olacaktı. Ancak, standart kitaplığın önemli bir bölümünün çoğaltılmasını gerektirir, çünkü yeni kod için genel sürümlere ve geriye dönük uyumluluk için genel olmayan sürümlere ihtiyaç duyar. .NET, sürüm 2.0'da Java'nın silinmekten kaçındığını yaptı. .NET'in değer türleri (yapı) vardır ve bunlar için birinci sınıf destek, tür silinmesini engeller. Java bunu yapmaz, bu nedenle birleşik jenerikler için baskı çok daha küçüktür.
Jan Hudec

Jan: Sadece jenerikleri yeniden birleştirmenin tüm eski kodların bozulduğu anlamına gelmediğini söylüyordum. Ayrıca List<int>kesinlikle iş yüklerini akımdan çok daha verimli hale getireceğini de ekleyeceğim List<Integer>.
Gabe

@Gabe: Buna katılmıyoruz. Sadece ana dezavantajı not etmek istedim.
Jan Hudec
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.