Uygulamada Tür Dönüştürme
Sayısal hesaplamalar ve OOP hiyerarşileri dahil olmak üzere gerçek dünya senaryolarında tür dönüştürmeyi uygulayın.
Uygulamada Tür Dönüştürme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. 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.
Uygulamada Tür Dönüştürme
Tür dönüştürme, gerçek Java kodunun her yerinde kullanılır: sayısal hesaplamalarda, nesne yönelimli sınıf hiyerarşilerinde, jenerik koleksiyonlarda ve eski API'lerde. Bu derste pratik yaklaşımlar ve dikkat edilmesi gereken noktalar ele alınır.
Üst Türe Dönüştürme: Çok Biçimlilik
Üst türe dönüştürme, bir alt türü üst türe dönüştürür. Her zaman güvenlidir ve örtük olarak yapılır; dönüştürme operatörü gerekmez. Bu, çok biçimliliği mümkün kılar.
class Payment {}
class CreditCardPayment extends Payment {
public void authorizeCard() {}
}
CreditCardPayment cc = new CreditCardPayment();
Payment p = cc; // implicit upcast — always safe
// p.authorizeCard(); // Compile error — Payment doesn't have this method
// need downcast to access subclass methodsAlt Türe Dönüştürme: Alt Tür Üyelerine Erişme
Alt türe dönüştürme, bir üst tür başvurusunu özgün alt türe geri dönüştürür. Açık bir dönüştürme gerektirir ve nesne gerçekten o alt tür değilse ClassCastException oluşturur.
Payment p = new CreditCardPayment();
// Downcast to access CreditCardPayment-specific method
if (p instanceof CreditCardPayment cc) {
cc.authorizeCard(); // safe with pattern matching
System.out.println("Card authorized");
}
// Unsafe downcast without check:
try {
BankTransfer bt = (BankTransfer) p; // ClassCastException!
} catch (ClassCastException e) {
System.out.println("Wrong type!");
}Hesaplamalarda Sayısal Tür Dönüştürme
Tamsayı bölmesi kesme yapar. Kesin bir sonuç elde etmek için bölme işleminden önce double türüne dönüştürün. Bu, Java'daki en yaygın aritmetik hatalardan biridir.
int totalRevenue = 1000;
int months = 3;
// Integer division — truncates!
double wrong = totalRevenue / months;
System.out.println(wrong); // 333.0 (not 333.33)
// Correct: cast one operand to double first
double correct = (double) totalRevenue / months;
System.out.println(correct); // 333.3333333333333Koleksiyonlarda Tür Dönüştürme (Jenerikler Öncesi)
Eski kodlar çoğu zaman nesneleri ham koleksiyonlarda saklar. Türü belirli değerleri almak için alt türe dönüştürme gerekir; önce mutlaka instanceof ile denetleyin.
import java.util.*;
// Legacy raw list (pre-Java 5 style)
List legacyList = new ArrayList();
legacyList.add("Alice");
legacyList.add(42);
for (Object item : legacyList) {
if (item instanceof String s) {
System.out.println("Name: " + s.toUpperCase());
} else if (item instanceof Integer n) {
System.out.println("Score: " + (n * 2));
}
}Arayüzlerle Tür Dönüştürme
Bir nesne, uyguladığı herhangi bir arayüze dönüştürülebilir. Böylece nesneyi bu arayüzü gerektiren bağlamlarda kullanabilirsiniz.
interface Printable { void print(); }
interface Saveable { void save(); }
class Report implements Printable, Saveable {
public void print() { System.out.println("Printing report"); }
public void save() { System.out.println("Saving report"); }
}
Object obj = new Report();
if (obj instanceof Printable p) p.print();
if (obj instanceof Saveable s) s.save();Dizilerle Tür Dönüştürme
Dizi türleri kendi hiyerarşilerini oluşturur. Bir String[], Object[] türünün alt türüdür. Dizilerdeki dönüştürme, nesnelerdekiyle aynı kuralları izler.
String[] names = {"Alice", "Bob"};
Object[] objs = names; // upcast — implicit
objs[0] = "Charlie"; // OK — still a String
try {
objs[0] = 42; // ArrayStoreException at runtime!
} catch (ArrayStoreException e) {
System.out.println("Cannot store Integer in String[]");
}
// Downcast back
String[] restored = (String[]) objs;E-Ticaret Örneği: Ödeme Yönlendirme
Gerçek hayattan bir örnek: ödemenin çalışma zamanı türüne göre doğru ödeme işlemcisine yönlendirme yapmak.
interface Payment { double amount(); }
record CreditCard(String last4, double amount) implements Payment {}
record CryptoPayment(String wallet, double amount) implements Payment {}
record BankWire(String iban, double amount) implements Payment {}
static void process(Payment p) {
switch (p) {
case CreditCard cc -> System.out.println("Charging card *" + cc.last4());
case CryptoPayment cp -> System.out.println("Sending to wallet " + cp.wallet());
case BankWire bw -> System.out.println("Wiring to IBAN " + bw.iban());
}
}
process(new CreditCard("4242", 99.99));
process(new CryptoPayment("0xABCD", 0.05));Genel Matematik İşlemleri için Number'a Dönüştürme
Number üst sınıfı, herhangi bir sayı türünü Number'a üst türe dönüştürerek ve doubleValue() çağırarak genel sayısal işlemler yapmanıza olanak tanır.
import java.util.List;
List<Number> numbers = List.of(1, 2.5, 3L, 4.0f);
double sum = 0;
for (Number n : numbers) {
sum += n.doubleValue(); // works for int, double, long, float
}
System.out.printf("Sum: %.1f%n", sum); // 10.5Güvenli Tür Dönüştürme Yardımcı Yöntemi
Hatalı dönüştürmelerde hata oluşturmak yerine boş bir Optional döndüren, yeniden kullanılabilir bir yardımcı yöntem; işlem hattı tarzı kodlar için idealdir.
import java.util.Optional;
public static <T> Optional<T> safeCast(Object obj, Class<T> clazz) {
return clazz.isInstance(obj)
? Optional.of(clazz.cast(obj))
: Optional.empty();
}
// Usage
Object val = "hello";
safeCast(val, String.class)
.ifPresent(s -> System.out.println(s.toUpperCase())); // HELLO
safeCast(val, Integer.class)
.ifPresentOrElse(
n -> System.out.println(n),
() -> System.out.println("Not an Integer") // prints this
);Kaçınılması Gereken Yaygın Hatalar
Şu yaygın tür dönüştürme hatalarına dikkat edin:
- Bölmeden önce dönüştürmeyi unutmak:
int/inther zaman bir tamsayı verir - instanceof denetimi yapmadan alt türe dönüştürmek → ClassCastException
- Üst türe dönüştürmeyi (güvenli), alt türe dönüştürmeyle (riskli) karıştırmak
- Sarmalayıcı türleri dönüştürmek:
(int) longValilelongVal.intValue()arasındaki fark
// Mistake 1: integer division
double avg = 7 / 2; // 3.0 — WRONG
double fixed = 7.0 / 2; // 3.5 — correct
// Mistake 2: unwrapping Long as int
Long bigId = 1234567890123L;
// int id = (int) bigId; // compiles but truncates!
long id = bigId; // correct
System.out.println(avg); // 3.0
System.out.println(fixed); // 3.5
System.out.println(id); // 1234567890123Hızlı Kontrol
Bu kodun çıktısı nedir?
int a = 7; int b = 2; double result = (double) a / b; System.out.println(result);
Özet: Uygulamada Tür Dönüştürme
Temel çıkarımlar:
- Üst türe dönüştürme (alt tür → üst tür) örtüktür ve her zaman güvenlidir
- Alt türe dönüştürme (üst tür → alt tür) açık bir dönüştürme gerektirir; önce instanceof kullanın
- Desen eşlemeli instanceof, denetim ile dönüştürmeyi tek ifadede birleştirir
- Tamsayı kesilmesini önlemek için bölmeden önce payı double türüne dönüştürün
- Türe dayalı temiz yönlendirme için desen eşlemeli switch kullanın
- İstisnalar yerine Optional ile çalışmak için safeCast yardımcı yöntemleri oluşturun
Yapay zeka eğitmeniyle Java öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 104
- Dersler
- 374
Sıkça Sorulan Sorular
“Uygulamada Tür Dönüştürme” dersi ücretsiz mi?
Evet — “Uygulamada Tür Dönüştürme” 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.
“Uygulamada Tür Dönüştürme” dersinde ne öğreneceğim?
Sayısal hesaplamalar ve OOP hiyerarşileri dahil olmak üzere gerçek dünya senaryolarında tür dönüştürmeyi uygulayın. 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 4. dersidir.
“Uygulamada Tür Dönüştürme” 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
- İlkel Türler ve Başvuru Türleri
- Genişletme ve Daraltma Dönüşümleri
- instanceof İşleci
- Uygulamada Tür Dönüştürme