Enum Tanımlama ve Kullanma
enum türlerini bildirin, sabitlerini kullanın ve values() ile ordinal() kullanarak üzerinde yineleyin.
Enum Tanımlama ve Kullanma, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Numaralandırmaları Tanımlama ve Kullanma
Bir numaralandırma (numaralandırılmış tür), sabit bir sabitler kümesini temsil eden özel bir sınıftır. Numaralandırmalar tür güvenlidir, okunabilirdir ve statik int sabitlerinden daha güçlüdür.
Numaralandırma Tanımlama
Bir numaralandırma tanımlamak için enum anahtar sözcüğünü kullanınız. Her sabit örtük olarak public static final olur ve numaralandırma türünün bir örneğidir.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.WEDNESDAY;
System.out.println(today); // WEDNESDAY
System.out.println(today.name()); // WEDNESDAY
System.out.println(today.ordinal()); // 2 (zero-based index)values() ile Yineleme
EnumType.values(), bildirim sırasındaki tüm sabitleri döndürür. Yineleme yapmak veya menüler oluşturmak için kullanınız.
enum Planet { MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE }
for (Planet p : Planet.values()) {
System.out.println(p.ordinal() + ": " + p);
}
// 0: MERCURY
// 1: VENUS
// 2: EARTH
// ...
// Count constants
System.out.println(Planet.values().length); // 8valueOf() ve Ayrıştırma
Enum.valueOf(name), bir String'i eşleşen sabite dönüştürür. Sabit bulunamazsa IllegalArgumentException oluşturur.
enum Status { PENDING, ACTIVE, SUSPENDED, CLOSED }
String input = "ACTIVE";
Status s = Status.valueOf(input);
System.out.println(s); // ACTIVE
try {
Status bad = Status.valueOf("UNKNOWN");
} catch (IllegalArgumentException e) {
System.out.println("Invalid status: UNKNOWN");
}
// Safe parse pattern
static Status safeFrom(String name) {
try { return Status.valueOf(name.toUpperCase()); }
catch (IllegalArgumentException e) { return Status.PENDING; }
}Seçim İfadelerinde Numaralandırmaları Kullanma
Numaralandırmalar, seçim deyimlerinde ve ifadelerinde kusursuz çalışır. Modern seçim ifadeleri, numaralandırma yönlendirmesini kısa ve tüm durumları kapsayacak şekilde yazmanızı sağlar.
enum OrderStatus { CREATED, PROCESSING, SHIPPED, DELIVERED, CANCELLED }
OrderStatus status = OrderStatus.SHIPPED;
String message = switch (status) {
case CREATED -> "Order received, awaiting payment";
case PROCESSING -> "Payment confirmed, preparing shipment";
case SHIPPED -> "On the way — track your package";
case DELIVERED -> "Delivered! Enjoy your order";
case CANCELLED -> "Order cancelled";
};
System.out.println(message); // On the way — track your packageKoşullu İfadelerle Numaralandırmalar
Numaralandırma sabitlerini karşılaştırmak için == kullanınız; bunlar tekil örneklerdir, dolayısıyla referans eşitliği doğru şekilde çalışır.
enum UserRole { GUEST, MEMBER, ADMIN, SUPERADMIN }
UserRole role = UserRole.ADMIN;
if (role == UserRole.ADMIN || role == UserRole.SUPERADMIN) {
System.out.println("Access granted to admin panel");
} else {
System.out.println("Access denied");
}
// Enum comparison: never use .equals() for enums
// == is correct and more readableKoleksiyonlarda Numaralandırmalar
Numaralandırmalar standart koleksiyonlarda saklanabilir. Yüksek performanslı numaralandırma tabanlı saklama için EnumSet ve EnumMap kullanınız (ilerleyen bir derste ele alınacaktır).
import java.util.*;
enum Permission { READ, WRITE, DELETE, ADMIN }
Set<Permission> userPerms = new HashSet<>();
userPerms.add(Permission.READ);
userPerms.add(Permission.WRITE);
System.out.println(userPerms.contains(Permission.DELETE)); // false
System.out.println(userPerms.contains(Permission.READ)); // true
List<Permission> allPerms = Arrays.asList(Permission.values());
System.out.println(allPerms.size()); // 4Numaralandırmalar Arayüzleri Uygular
Numaralandırmalar arayüzleri uygulayabilir; böylece her sabite davranış kazandırabilir veya tüm sabitler için ortak bir sözleşme tanımlayabilirsiniz.
interface Describable {
String describe();
}
enum Season implements Describable {
SPRING, SUMMER, FALL, WINTER;
public String describe() {
return switch (this) {
case SPRING -> "Mild and rainy";
case SUMMER -> "Hot and sunny";
case FALL -> "Cool with falling leaves";
case WINTER -> "Cold and snowy";
};
}
}
for (Season s : Season.values()) {
System.out.println(s + ": " + s.describe());
}Durum Makinesi Olarak Numaralandırma
Numaralandırmalar durum makineleri için doğal bir seçimdir. Her sabit bir durumu temsil eder ve yöntemler geçerli geçişleri tanımlar.
enum TrafficLight {
RED, YELLOW, GREEN;
public TrafficLight next() {
return switch (this) {
case RED -> GREEN;
case GREEN -> YELLOW;
case YELLOW -> RED;
};
}
}
TrafficLight light = TrafficLight.RED;
for (int i = 0; i < 6; i++) {
System.out.println(light);
light = light.next();
}
// RED, GREEN, YELLOW, RED, GREEN, YELLOWNumaralandırma için En İyi Uygulamalar
Numaralandırmaları kullanırken şu en iyi uygulamaları izleyiniz:
- Sabitler için TÜMÜ_BÜYÜK_HARF adlarını kullanınız (geleneksel kullanım)
- Tür güvenliği için int veya String sabitleri yerine numaralandırmaları tercih ediniz
- Tüm durumları kapsayan yönlendirme için seçim ifadelerini kullanınız
- Sabitler veri taşıdığında numaralandırmalara alanlar ve yöntemler ekleyiniz
Uygulama: HTTP Durum Kodları
Sayısal koddan fabrika yöntemiyle oluşturulan HTTP durum kategorilerini modelleyen gerçek dünya numaralandırması.
enum HttpStatus {
OK(200), CREATED(201), BAD_REQUEST(400),
UNAUTHORIZED(401), NOT_FOUND(404), SERVER_ERROR(500);
public final int code;
HttpStatus(int code) { this.code = code; }
public static HttpStatus from(int code) {
for (HttpStatus s : values())
if (s.code == code) return s;
throw new IllegalArgumentException("Unknown HTTP code: " + code);
}
public boolean isSuccess() { return code >= 200 && code < 300; }
}
HttpStatus s = HttpStatus.from(404);
System.out.println(s + " (" + s.code + ") success=" + s.isSuccess());
// NOT_FOUND (404) success=falseHızlı Kontrol
Aşağıdaki kodun çıktısı nedir?
enum Color { RED, GREEN, BLUE }
System.out.println(Color.GREEN.ordinal());Özet: Numaralandırmaları Tanımlama ve Kullanma
Önemli çıkarımlar:
- Numaralandırmalar, tür güvenliğiyle adlandırılmış sabit bir sabitler kümesi tanımlar
- values() tüm sabitler üzerinde yineler; ordinal() sıfır tabanlı dizini verir
- valueOf(), bir String'i eşleşen sabite dönüştürür
- Numaralandırma örneklerini karşılaştırmak için equals yerine == kullanınız
- Numaralandırmalar, tüm durumları kapsayan yönlendirme için seçim ifadelerinde çok iyi çalışır
- Numaralandırmalar, her sabite davranış kazandırmak için arayüzleri uygulayabilir
Sıkça Sorulan Sorular
“Enum Tanımlama ve Kullanma” dersi ücretsiz mi?
Evet — “Enum Tanımlama ve Kullanma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Enum Tanımlama ve Kullanma” dersinde ne öğreneceğim?
enum türlerini bildirin, sabitlerini kullanın ve values() ile ordinal() kullanarak üzerinde yineleyin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Enum Tanımlama ve Kullanma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Enum Tanımlama ve Kullanma
- Alanlara ve Yöntemlere Sahip Enum'lar
- Enum'larla Switch İfadeleri
- EnumSet ve EnumMap