Alanlara ve Yöntemlere Sahip Enum'lar
Davranışı kapsüllemek için enum'lara alanlar, yapıcılar ve yöntemler ekleyin.
Alanlara ve Yöntemlere Sahip Enum'lar, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. 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.
Alanları ve Yöntemleri Olan Numaralandırmalar
Numaralandırma sabitleri veri taşıyabilir. Alanları bildirerek ve bir kurucu ekleyerek alan oluşturursunuz. Kurucu otomatik olarak private olur.
Numaralandırmalarda Alan Tanımlama
Her numaralandırma sabiti, sınıf yüklenirken kurucuyu çağırır. Alan değerleri bir kez atanır ve (final olarak tanımlandıklarında) değişmezdir.
enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6);
private final double mass; // kilograms
private final double radius; // meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double mass() { return mass; }
public double radius() { return radius; }
}Numaralandırmalara Yöntem Ekleme
Numaralandırma türleri, hesaplanan özellikler de dahil olmak üzere bir sınıfa koyabileceğiniz her türlü yöntemi içerebilir.
enum Planet {
EARTH(5.976e+24, 6.37814e6);
// ... constructor and fields ...
static final double G = 6.67300E-11;
public double surfaceGravity() {
return G * mass / (radius * radius);
}
public double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}
double earthWeight = 75.0;
double mass = earthWeight / Planet.EARTH.surfaceGravity();
for (Planet p : Planet.values())
System.out.printf("Weight on %s: %.2f%n", p, p.surfaceWeight(mass));Numaralandırma Sabitlerinde abstract Yöntemler
Her sabit, numaralandırma gövdesinde bildirilen bir abstract yöntemin kendi uygulamasını sağlayabilir.
enum Operation {
PLUS { public double apply(double x, double y) { return x + y; } },
MINUS { public double apply(double x, double y) { return x - y; } },
TIMES { public double apply(double x, double y) { return x * y; } },
DIVIDE{ public double apply(double x, double y) { return x / y; } };
public abstract double apply(double x, double y);
}
System.out.println(Operation.PLUS.apply(3, 4)); // 7.0
System.out.println(Operation.TIMES.apply(3, 4)); // 12.0Dize Etiketli Numaralandırmalar
Yaygın bir örüntü: her sabite, alan olarak saklanan ve insanlar tarafından okunabilen bir etiket vermek.
enum UserRole {
GUEST("Guest User"),
MEMBER("Registered Member"),
ADMIN("Administrator"),
SUPERADMIN("Super Administrator");
private final String label;
UserRole(String label) { this.label = label; }
public String label() { return label; }
public static UserRole fromLabel(String lbl) {
for (UserRole r : values())
if (r.label.equalsIgnoreCase(lbl)) return r;
throw new IllegalArgumentException(lbl);
}
}
System.out.println(UserRole.ADMIN.label()); // AdministratorBirden Çok Alanı Olan Numaralandırma
Numaralandırmalar gerektiği kadar alana sahip olabilir. Burada bir para birimi numaralandırması hem ISO kodunu hem de sembolü saklar.
enum Currency {
USD("US Dollar", "$"),
EUR("Euro", "\u20ac"),
GBP("British Pound", "\u00a3"),
JPY("Japanese Yen", "\u00a5");
public final String name;
public final String symbol;
Currency(String name, String symbol) {
this.name = name;
this.symbol = symbol;
}
public String format(double amount) {
return String.format("%s%.2f", symbol, amount);
}
}
System.out.println(Currency.EUR.format(99.99)); // \u20ac99.99toString() Yöntemini Geçersiz Kılma
Bir numaralandırmada toString() yöntemini geçersiz kılarak sabit adı yerine özel bir dize gösterimi döndürünüz.
enum HttpMethod {
GET, POST, PUT, PATCH, DELETE;
@Override
public String toString() {
return name().toUpperCase();
}
public boolean hasBody() {
return this == POST || this == PUT || this == PATCH;
}
}
HttpMethod m = HttpMethod.POST;
System.out.println(m); // POST
System.out.println(m.hasBody()); // true
System.out.println(HttpMethod.GET.hasBody()); // falseDoğrulamalı Numaralandırma
Numaralandırma kurucuları, geçersiz durumları önlemek için bağımsız değişkenlerini doğrulayabilir.
enum DiscountTier {
BRONZE(5), SILVER(10), GOLD(20), PLATINUM(30);
public final int percentage;
DiscountTier(int percentage) {
if (percentage < 0 || percentage > 100)
throw new IllegalArgumentException("Invalid: " + percentage);
this.percentage = percentage;
}
public double apply(double price) {
return price * (1 - percentage / 100.0);
}
}
System.out.println(DiscountTier.GOLD.apply(100.0)); // 80.0Tekil Nesne Örüntüsü
Tek sabitli bir numaralandırma, Java'da tekil nesne uygulamanın en güvenli yoludur; varsayılan olarak serileştirmeye ve iş parçacığı kullanımına karşı güvenlidir.
enum AppConfig {
INSTANCE;
private String dbUrl = "jdbc:postgresql://localhost/mydb";
private int maxConnections = 20;
public String getDbUrl() { return dbUrl; }
public int getMaxConnections() { return maxConnections; }
public void setDbUrl(String url) { this.dbUrl = url; }
}
// Access the singleton
AppConfig config = AppConfig.INSTANCE;
System.out.println(config.getDbUrl());Alan Modellerinde Numaralandırmalar
Numaralandırmalar, tür güvenli kategorileri temsil etmek için alan modellerinde yaygın olarak kullanılır: sipariş durumu, ödeme yöntemi, bildirim türü vb.
enum PaymentMethod {
CREDIT_CARD("Credit Card", true),
DEBIT_CARD("Debit Card", true),
PAYPAL("PayPal", false),
CRYPTO("Cryptocurrency", false),
BANK_TRANSFER("Bank Transfer", false);
public final String displayName;
public final boolean instantCharge;
PaymentMethod(String displayName, boolean instantCharge) {
this.displayName = displayName;
this.instantCharge = instantCharge;
}
}Numaralandırma Alanı ve Hesaplanan Değer
Alanlar sabit verileri saklar; yöntemler dinamik değerleri hesaplar. Sabit veriler için alanları, türetilmiş değerler için yöntemleri kullanınız.
enum DayType {
MONDAY(false), TUESDAY(false), WEDNESDAY(false),
THURSDAY(false), FRIDAY(false),
SATURDAY(true), SUNDAY(true);
private final boolean weekend;
DayType(boolean weekend) { this.weekend = weekend; }
public boolean isWeekend() { return weekend; }
public boolean isWeekday() { return !weekend; }
public static long weekdayCount() {
return java.util.Arrays.stream(values())
.filter(DayType::isWeekday).count();
}
}
System.out.println(DayType.weekdayCount()); // 5Hızlı Kontrol
Bir numaralandırma kurucusu, normal bir sınıf kurucusundan nasıl farklıdır?
Özet: Alanları ve Yöntemleri Olan Numaralandırmalar
Önemli çıkarımlar:
- Her sabit için veri taşımak üzere alan ve kurucu ekleyiniz
- Numaralandırma kurucuları örtük olarak private olur
- abstract yöntemler, her sabitin kendi uygulamasını sağlamasına olanak tanır
- Özel görüntüleme adları için toString() yöntemini geçersiz kılınız
- Tek sabitli numaralandırmalar en iyi tekil nesne uygulamasıdır
- Numaralandırmalar, tür güvenli kategoriler olarak alan modellerine doğal biçimde uyum sağlar
Sıkça Sorulan Sorular
“Alanlara ve Yöntemlere Sahip Enum'lar” dersi ücretsiz mi?
Evet — “Alanlara ve Yöntemlere Sahip Enum'lar” 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.
“Alanlara ve Yöntemlere Sahip Enum'lar” dersinde ne öğreneceğim?
Davranışı kapsüllemek için enum'lara alanlar, yapıcılar ve yöntemler ekleyin. 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 2. dersidir.
“Alanlara ve Yöntemlere Sahip Enum'lar” 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