Enum'lar ve Enum Metotları
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 50 / 87.
enum (numaralandırma), sabit bir sabitler kümesini temsil eden özel bir sınıf türüdür. Haftanın günleri veya sipariş durumları gibi seçenekleri temsil etmek için rastgele tam sayılar ya da dizeler kullanmak yerine, enum'lar tür güvenli ve okunabilir değerler sağlar.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Yazdırır: MONDAYNumaralandırmalar basit sabitlerden daha fazlasıdır: bunlar tam sınıflardır. Bunlara alanlar, yapıcılar ve metotlar ekleyebilirsiniz:
enum Size {
SMALL(10), MEDIUM(20), LARGE(30);
private int price;
Size(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
System.out.println(Size.MEDIUM.getPrice()); // Yazdırır: 20Her enum, kullanışlı yerleşik yöntemlerle birlikte gelir. values() yöntemi tüm sabitlerden oluşan bir dizi döndürürken, valueOf() bir dizeyi eşleşen enum sabitine dönüştürür. ordinal() yöntemi sabitin konumunu döndürür (0'dan başlayarak):
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // String'i enum'a dönüştürürEnum'lar, çalışma zamanında değişmeyecek, bilinen ve sabit bir değer kümesine sahip olduğunuzda idealdir; kodunuzu yalnızca sabitleri kullanmaya kıyasla daha güvenli ve daha anlaşılır hâle getirir.
Görev
KolayAlanlar, yapıcılar ve metotlarla enum'ların gücünü sergileyen bir kahve dükkânı sipariş sistemi oluşturalım. Fiyatlandırma bilgilerini depolayan bir CoffeeSize enum'ı ve müşteri siparişlerini işleyen bir sistem oluşturacaksın.
kodunu üç dosyaya ayıracaksın:
CoffeeSize.java: İlişkili fiyatlarıyla kahve boyutlarını temsil eden bir enum oluştur. Enum'ında sırasıylaSMALL,MEDIUMveLARGEfiyatlarına sahip üç sabit bulunmalı:2.50,3.50ve4.50.Her boyutun özel bir
pricealanına (double), bu alanı ayarlayan bir yapıcıya ve alanı almak için birgetPrice()metoduna ihtiyacı vardır. Ayrıca şu biçimde bir dize döndüren birgetDescription()metodu ekle:[size name] - $[price](örneğin:SMALL - $2.5)Order.java: Bir kahve siparişini temsil eden bir sınıf oluştur. Bir Order'ın iki özel alanı vardır:customerName(String) vesize(CoffeeSize). Her iki alanı başlatmak için bir yapıcı ve her biri için getter metotları ekle.Çok satırlı bir dize döndüren bir
getReceipt()metodu ekle:Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: Kahve dükkânına hayat ver! İki girdi alacaksın: bir müşteri adı (String) ve bir boyut adı (String; örneğin "SMALL", "MEDIUM" veya "LARGE").Önce, boyut dizesini karşılık gelen enum sabitine dönüştürmek için
CoffeeSize.valueOf()kullan. Müşteri adı ve boyutla bir Order oluştur, ardından fişi yazdır.Fişi yazdırdıktan sonra boş bir satır yazdır, ardından
CoffeeSizemetodunu kullanarak tümvalues()değerleri üzerinde yineleme yapıp tam menüyü görüntüle. Her boyut için açıklamasını ayrı bir satırda yazdır.
İki girdiyi sırayla alacaksın: müşteri adı ve boyut adı ("SMALL", "MEDIUM" veya "LARGE" seçeneklerinden biri).
Enum'ın hem boyut kimliğini hem de ilişkili fiyatını nasıl kapsüllediğine dikkat et; bu, kodunun tamamında ayrı sabitler veya sihirli sayılar kullanmaktan çok daha temizdir!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Girdileri oku
String customerName = scanner.nextLine();
String sizeName = scanner.nextLine();
// TODO: sizeName'i valueOf() kullanarak CoffeeSize enum'una dönüştür
// TODO: Müşteri adı ve boyut ile bir Order oluştur
// TODO: Fişi yazdır
// TODO: Boş bir satır yazdır
// TODO: Tüm CoffeeSize değerleri üzerinde yineleyerek tam menüyü görüntüle
// İpucu: Tüm enum sabitlerini almak için CoffeeSize.values() kullan
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi