0Pricing
Java Academy · Pelajaran

Casting Tipe dalam Praktik

Terapkan casting tipe dalam skenario dunia nyata, termasuk perhitungan numerik dan hierarki OOP.

Casting Tipe dalam Praktik adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Penerapan Konversi Tipe

Konversi tipe digunakan di berbagai bagian kode Java nyata: perhitungan numerik, hierarki OOP, koleksi generik, dan API lama. Pelajaran ini membahas pola praktis serta hal-hal yang perlu dihindari.

Konversi ke Supert ipe: Polimorfisme

Konversi ke supertipe mengubah subtipe menjadi supertipe. Proses ini selalu aman dan berlangsung implisit, sehingga tidak memerlukan operator konversi. Inilah yang memungkinkan polimorfisme.

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

Konversi ke Subtipe: Mengakses Anggota Subtipe

Konversi ke subtipe mengubah referensi supertipe kembali menjadi subtipe asal. Proses ini memerlukan konversi eksplisit dan melempar ClassCastException jika objek tersebut sebenarnya bukan subtipe itu.

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!");
}

Konversi Numerik dalam Perhitungan

Pembagian bilangan bulat akan memotong hasil. Lakukan konversi ke double sebelum membagi untuk memperoleh hasil yang akurat. Ini merupakan salah satu kesalahan aritmetika yang paling umum di Java.

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

Konversi dalam Koleksi (Sebelum Generik)

Kode lama sering menyimpan objek dalam koleksi tanpa tipe. Konversi ke subtipe diperlukan untuk mengambil nilai bertipe—selalu lakukan pemeriksaan dengan instanceof terlebih dahulu.

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));
    }
}

Konversi dengan Antarmuka

Suatu objek dapat dikonversi ke antarmuka apa pun yang diimplementasikannya, sehingga Anda dapat menggunakannya dalam konteks yang memerlukan antarmuka tersebut.

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();

Konversi dengan Array

Tipe array membentuk hierarkinya sendiri. String[] merupakan subtipe dari Object[]. Konversi array mengikuti aturan yang sama seperti objek.

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;

Contoh E-Commerce: Penyaluran Pembayaran

Contoh dalam situasi nyata: menyalurkan pemrosesan ke pemroses pembayaran yang tepat berdasarkan tipe pembayaran saat program berjalan.

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));

Konversi ke Number untuk Matematika Generik

Supert ipe Number memungkinkan Anda melakukan operasi numerik generik pada tipe angka apa pun dengan mengonversinya ke Number dan memanggil doubleValue().

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

Metode Utilitas Konversi yang Aman

Metode utilitas yang dapat digunakan kembali ini mengembalikan Optional kosong alih-alih melempar kesalahan saat konversi gagal—sangat cocok untuk kode bergaya alur pemrosesan.

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
    );

Kesalahan Umum yang Perlu Dihindari

Waspadai kesalahan konversi tipe yang umum berikut:

  • Lupa melakukan konversi sebelum pembagian: int/int selalu menghasilkan bilangan bulat
  • Melakukan konversi ke subtipe tanpa pemeriksaan instanceof → ClassCastException
  • Menyamakan konversi ke supertipe yang aman dengan konversi ke subtipe yang berisiko
  • Keliru membedakan konversi tipe pembungkus: (int) longVal dan longVal.intValue()
// 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

Pemeriksaan Cepat

Apa keluaran kode ini?

int a = 7;
int b = 2;
double result = (double) a / b;
System.out.println(result);

Ringkasan: Penerapan Konversi Tipe

Inti pembelajaran:

  • Konversi ke supertipe (subtipe → supertipe) berlangsung implisit dan selalu aman
  • Konversi ke subtipe (supertipe → subtipe) memerlukan konversi eksplisit; gunakan instanceof terlebih dahulu
  • Pencocokan pola instanceof menggabungkan pemeriksaan dan konversi tipe dalam satu ekspresi
  • Konversikan pembilang ke double sebelum membagi untuk menghindari pemotongan bilangan bulat
  • Gunakan pencocokan pola switch untuk penyaluran berdasarkan tipe yang rapi
  • Bangun utilitas safeCast untuk bekerja dengan Optional, bukan pengecualian

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Casting Tipe dalam Praktik” gratis?

Ya — teks lengkap “Casting Tipe dalam Praktik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Casting Tipe dalam Praktik”?

Terapkan casting tipe dalam skenario dunia nyata, termasuk perhitungan numerik dan hierarki OOP. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Casting Tipe dalam Praktik” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tipe Primitif vs Tipe Referensi
  2. Konversi Pelebaran dan Penyempitan
  3. Operator instanceof
  4. Casting Tipe dalam Praktik
← Kembali ke Java Academy