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.
Bir enum (numaralandırma), sabit bir değerler 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 veya dizeler kullanmak yerine, enum'lar tip 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: MONDAYEnum'lar basit sabitlerden daha fazlasıdır; onlar tam sınıflardır. Onlara alanlar (fields), yapıcılar (constructors) ve metotlar (methods) 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()); // Şunu yazdırır: 20Her enum, kullanışlı yerleşik metotlarla birlikte gelir. values() metodu tüm sabitlerin bir dizisini döndürür, valueOf() ise bir dizeyi eşleşen enum sabitine dönüştürür. ordinal() metodu sabitin konumunu (0'dan başlayarak) döndürür:
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; bu da kodunuzu düz sabitler kullanmaktan daha güvenli ve daha anlamlı hale getirir.
Görev
KolayAlanlar, yapıcılar ve metotlar içeren enum'ların gücünü gösteren bir kahve dükkanı sipariş sistemi kuralım. Fiyat bilgilerini saklayan bir CoffeeSize enum'ı ve müşteri siparişlerini işleyen bir sistem oluşturacaksınız.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
CoffeeSize.java: İlişkili fiyatlara sahip kahve boyutlarını temsil eden bir enum oluşturun. Enum'ınız üç sabite sahip olmalıdır: sırasıyla2.50,3.50ve4.50fiyatlarıylaSMALL,MEDIUMveLARGE.Her boyutun özel bir
pricealanına (double), bunu ayarlamak için bir yapıcıya (constructor) ve bunu almak için birgetPrice()metoduna ihtiyacı vardır. Ayrıca şu formatta bir dize döndüren birgetDescription()metodu ekleyin:[size name] - $[price](örneğin:SMALL - $2.5)Order.java: Bir kahve siparişini temsil eden bir sınıf oluşturun. Bir Order'ın iki özel alanı vardır:customerName(String) vesize(CoffeeSize). Her iki alanı da başlatan bir yapıcı ve her biri için getter metotları ekleyin.Çok satırlı bir dize döndüren bir
getReceipt()metodu ekleyin:Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: Kahve dükkanınızı hayata geçirin! İki girdi alacaksınız: bir müşteri adı (String) ve bir boyut adı ("SMALL", "MEDIUM" veya "LARGE" gibi bir String).İlk olarak, boyut dizesini karşılık gelen enum sabitine dönüştürmek için
CoffeeSize.valueOf()kullanın. Müşteri adı ve boyutuyla bir Order oluşturun, ardından makbuzu yazdırın.Makbuzu yazdırdıktan sonra boş bir satır yazdırın, ardından
values()metodunu kullanarak tümCoffeeSizedeğerleri üzerinde dönerek tam menüyü görüntüleyin. Her boyut için açıklamasını ayrı bir satıra yazdırın.
Sırasıyla iki girdi alacaksınız: müşteri adı ve boyut adı ("SMALL", "MEDIUM" veya "LARGE" değerlerinden biri).
Enum'ın hem boyut kimliğini hem de onunla ilişkili fiyatı nasıl kapsüllediğine dikkat edin; bu, kodunuzun her yerinde ayrı sabitler veya sihirli sayılar kullanmaktan çok daha temizdir!
Kopya kağıdı
Bir enum, sabitlerden oluşan sabit bir kümeyi temsil eden, tip güvenli ve okunabilir değerler sağlayan özel bir sınıf türüdür:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Çıktı: MONDAYEnum'lar alanlara (fields), yapılandırıcılara (constructors) ve metotlara sahip olabilir:
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()); // Çıktı: 20Yerleşik enum metotları:
values()- tüm enum sabitlerinden oluşan bir dizi döndürürvalueOf(String)- bir dizeyi eşleşen enum sabitine dönüştürürordinal()- 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"); // Dizeyi enum'a dönüştürürKendin 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: valueOf() kullanarak sizeName'i CoffeeSize enum'ına dönüştürün
// TODO: Müşteri adı ve boyutu ile bir Sipariş (Order) oluşturun
// TODO: Makbuzu yazdırın
// TODO: Boş bir satır yazdırın
// TODO: Tüm CoffeeSize değerlerini döngüye alarak tam menüyü görüntüleyin
// İpucu: Tüm enum sabitlerini almak için CoffeeSize.values() kullanın
}
}
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ı