Java Academy · Ders

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.

4. ders / 413 adım

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 methods

Alt 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.3333333333333

Koleksiyonlarda 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.5

Gü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/int her 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) longVal ile longVal.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);    // 1234567890123

Hı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
Başlamak ücretsiz

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

  1. İlkel Türler ve Başvuru Türleri
  2. Genişletme ve Daraltma Dönüşümleri
  3. instanceof İşleci
  4. Uygulamada Tür Dönüştürme
← Java Academy Sayfasına Dön