Java 14'ün yeni özellikleri nelerdir?

Kayıt, Java'ya veri sınıflarını doğru şekilde uygulama yeteneği sağlar ve veri sınıflarını uygulamak için uzun kod yazma ihtiyacını ortadan kaldırır. Java 14'teki kayıtların yeni özelliklerine bir göz atalım.

Yazar | Nathan Esquenazi

Çevirmen | Crescent Moon, sorumlu editör | Guo Rui

Aşağıdaki çeviridir:

Java 14 resmi olarak Mart 2020'de piyasaya sürülecek. Java, yeni sürümün yayın döngüsü olarak 6 ay sürüyor .. Önceki sürümde olduğu gibi, JDK 14'ün dilin kendisine ve JVM düzeyine bazı yeni özellikler getirmesi bekleniyor.

Özellikler listesine bakarsak, geliştiricilerin dört gözle beklediği bazı dil özelliklerini göreceğiz: kayıtlar, anahtar ifadeleri (JDK 13'te var, ancak yalnızca önizleme modunda), kalıp eşleştirme. Daha ilginç kayıt özelliklerinden birine bir göz atalım.

Ön koşul

OpenJDK web sitesinden (https://jdk.java.net/14/) JDK 14'ün erken önizleme sürümüne ihtiyacımız var.

Rekor nedir?

Kayıt, saf verileri depolamak için kullanılan özel bir tür olan "veri türü" anlamına gelir. Kotlin'in veri sınıfları gibi diğer dillerde de benzer kayıt yapıları mevcuttur. Türün bir kayıt olarak bildirilmesiyle amaç, tür aracılığıyla ifade edilebilir, yani yalnızca veriler ifade edilir. Kayıtları bildirmek için sözdizimi, genellikle eşittir ve hashCode (genellikle "ortak şablon" kodu olarak adlandırılır) gibi temel Nesne yöntemlerini uygulamaya ihtiyaç duyan sıradan sınıfları kullanmaktan çok daha basittir. Model sınıfları (ORM aracılığıyla kalıcı) veya veri aktarım nesneleri (DTO'lar) gibi şeyleri modellerken kayıt iyi bir seçimdir.

Java dilinde kayıtların nasıl uygulandığını öğrenmek istiyorsanız, numaralandırılmış türlere başvurabilirsiniz. Numaralandırma ayrıca özel anlamlara ve zarif sözdizimine sahip bir sınıftır. Kayıtlar ve numaralandırmalar hala sınıflar olduğundan, sınıflarda bulunan özelliklerin çoğu korunur, bu nedenle kayıtlar tasarım basitliği ile esneklik arasında bir denge sağlar.

Kayıt, bir önizleme dili özelliğidir, yani bu özellik tam olarak desteklenmesine rağmen, standart JDK'ya resmi olarak girilmemiştir ve yalnızca etkinleştirme bayrağıyla kullanılabilir. Önizleme dili özelliği gelecekteki sürümlerde güncellenebilir veya kaldırılabilir. Anahtar türü benzerdir ve gelecek sürümlerde sonsuza kadar sürebilir.

Kaydedilmiş bir örnek

Aşağıda bir kayıt örneği verilmiştir:

paket örnekleri;

kişi kaydı (String firstName, String lastName) {}

Tanımladık Kişi Nesne, içerir İsim ile Soyadı İki bileşen için kaydedilen gövde boştur.

Sonra onu derliyoruz. Dikkat --Önizlemeyi etkinleştir Seçenekler.

javac --enable-önizleme --release 14 Person.java

Not: Person.java, önizleme dili özelliklerini kullanır.

Not: -Xlint ile yeniden derleyin: ayrıntılar için önizleme.

Gizemini ortaya çıkarın

Daha önce de belirtildiği gibi, kayıt yalnızca verileri kaydetmek ve açığa çıkarmak için bir sınıftır.

Ardından, javap aracı tarafından oluşturulan bayt koduna bir göz atalım:

javap -v -p Kişi.class

Bayt kodu:

Sınıf dosyası örnekleri / Person.class

Son değiştirilme tarihi: 22 Ara 2019; boyut 1273 bayt

SHA-256 sağlama toplamı 6f1b325121ca32a0b6127180eff29dcac4834f9c138c9613c526a4202fef972f

"Person.java" dan derlenmiştir

son sınıf örnekleri. Person, java.lang.Record'u genişletir.

alt sürüm: 65535

ana sürüm: 58

bayraklar: (0x00 30 ) ACC_FINAL, ACC_SUPER

this_class: # 8 // örnekler / Kişi

super_class: # 2 // java / dil / Kayıt

arabirimler: 0, alanlar: 2, yöntemler: 6, öznitelikler: 4

Sabit havuz:

# 1 = Methodref # 2. # 3 // java / lang / Record. "": V

# 2 = Sınıf # 4 // java / lang / Kayıt

# 3 = NameAndType # 5: # 6 // "": V

# 4 = Utf8 java / lang / Kayıt

# 5 = Utf8

# 6 = Utf8 V

# 7 = Alanref # 8. # 9 // örnekler / Kişi.firstName: Ljava / dil / Dize;

# 8 = Sınıf # 10 // örnekler / Kişi

# 9 = NameAndType # 11: # 12 // firstName: Ljava / dil / String;

# 10 = Utf8 örnekleri / Kişi

# 11 = Utf8 firstName

# 12 = Utf8 Ljava / dil / Dize;

# 13 = Alan referans # 8. # 14 // örnekler / Kişi.lastName: Lav / dil / Dize;

# 14 = NameAndType # 15: # 12 // lastName: Ljava / dil / Dize;

# 15 = Utf8 lastName

# 16 = Alan referans # 8. # 9 // örnekler / Kişi.firstName: Ljava / dil / Dize;

# 17 = Alan referans # 8. # 14 // örnekler / Kişi.lastName: Ljava / dil / String;

# 18 = InvokeDynamic # 0: # 19 // # 0: toString: (Lexamples / Kişi;) Ljava / lang / String;

# 19 = NameAndType # 20: # 21 // toString: (Lexamples / Kişi;) Ljava / lang / String;

# 20 = Utf8 toString

# 21 = Utf8 (Sözcük Örnekler / Kişi;) Ljava / dil / Dize;

# 22 = InvokeDynamic # 0: # 23 // # 0: hashCode: (Lexamples / Kişi;) I

# 23 = NameAndType # 24: # 25 // hashCode: (Örnekler / Kişi;) I

# 24 = Utf8 hashCode

# 25 = Utf8 (Sözcük Örnekler / Kişi;) I

# 26 = InvokeDynamic # 0: # 27 // # 0: eşittir: (Lexamples / Person; Ljava / lang / Object;) Z

# 27 = NameAndType # 28: # 29 // şuna eşittir: (Lexamples / Person; Ljava / lang / Object;) Z

# 28 = Utf8 eşittir

# 29 = Utf8 (Sözcük Örnekler / Kişi; Ljava / dil / Nesne;) Z

# 30 = Utf8 (Lav / dil / Dize; Lav / dil / Dize;) V

# 31 = Utf8 Kodu

# 32 = Utf8 LineNumberTable

# 33 = Utf8 MethodParameters

# 34 = Utf8 Ljava / dil / Dize;

# 35 = Utf8 I

# 36 = Utf8 (Lav / dil / Nesne;) Z

# 37 = Utf8 Kaynak Dosyası

# 38 = Utf8 Person.java

# 39 = Utf8 Kaydı

# 40 = Utf8 BootstrapMethods

# 41 = MethodHandle 6: # 42 // REF_invokeStatic java / lang / runtime / ObjectMethods.bootstrap: (Ljava / lang / invoke / MethodHandles $ Lookup; Ljava / lang / String; Ljava / lang / invoke / TypeDescriptor; Lav / lang / Sınıf; Ljava / lang / String;

2020'de Android için yeni beklentiler neler?
önceki
Bayrak artık kurulmuyor, Mark Zuckerbergin Yeni Yıl mesajı
Sonraki
JD.com "70 milyon yuan, tüm proje ekiplerinden ihraç edildi" yanıtını verdi; WeChat Moments, Alipay'in Wufu'yu engelledi; MySQL 8.0.19 yayınlandı | Geek Manşetleri
"Kardeşim 1 yıl mezun oldu ve Python'dan 50W kazandı!" Netizen: Çok az üfleyin ...
Oracle'ın Amazon'un API'sini kopyalaması mı?
İngiltere Başbakanı yoğun bakım ünitesine nakledildikten sonra durumu kötüleşti! ABD hisse senetleri 1600 puan yükselerek% 8 arttı Küresel salgın dönüm noktası mı?
Piyasanın iniş ve çıkışlarında "sürekli mutluluk" nasıl elde edilir?
ABD hisse senetleri son işlemlerde şiddetli bir şekilde yükseldi, Dow 1.600 puan yükseldi ve yeni bir toparlanma zirvesine ulaştı.İngiliz Başbakanının durumu kötüleşti ve yoğun bakım ünitesine girdi,
İlk 49 sağlık ekibi bugün Wuhan'dan tahliye edildi ve Guangdong sağlık ekipleri 19'undan sonra Guangdong'a dönebilir.
GACın çalışma ve üretime devam etmek için "çalışma kitabı": "Kaybedilen zaman nasıl geri alınır"?
Alman çift çeşitli karnavallara katıldı ve binlerce kişi karantinaya alındı, oyun durduruldu ve istasyon boştu
Tavla, Dongyangguang ... Dongguan, Chang'an'da inşaatı devam eden tüm büyük projeler yeniden başladı
Guangxi İlk ve Orta Okulları Zhuang Halkının "3 Mart" Çevrimiçi Somut Olmayan Mirasını "Hava Sınıfı" ile Kutladı
Kapalı! Zibo'daki 43 tıp kurumu iptal edildi (liste eklidir), bir daha gitme
To Top