Typecasting in de praktijk
Pas typecasting toe in praktijksituaties, waaronder numerieke berekeningen en OOP-hiërarchieën.
Typecasting in de praktijk is een gratis Java Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.
Typecasten in de praktijk
Typecasten wordt overal gebruikt in echte Java-code: numerieke berekeningen, OOP-hiërarchieën, generieke verzamelingen en verouderde API's. Deze les behandelt praktische patronen en valkuilen.
Upcasten: polymorfisme
Een upcast zet een subtype om in een supertype. Dit is altijd veilig en impliciet — er is geen castoperator nodig. Hierdoor is polymorfisme mogelijk.
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 methodsDowncasten: leden van een subtype gebruiken
Een downcast zet een verwijzing naar een supertype terug naar het oorspronkelijke subtype. Hiervoor is een expliciete cast nodig; als het object niet daadwerkelijk dat subtype is, wordt ClassCastException gegooid.
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!");
}Numeriek casten in berekeningen
Gehele deling kapt af. Cast naar double voordat je deelt om een nauwkeurig resultaat te krijgen. Dit is een van de meest voorkomende rekenkundige fouten in 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.3333333333333Casten in verzamelingen (vóór generieke typen)
Oude code slaat objecten vaak op in ongetypeerde verzamelingen. Downcasten is nodig om getypeerde waarden op te halen — controleer altijd eerst met instanceof.
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));
}
}Casten met interfaces
Een object kan worden gecast naar elke interface die het implementeert, zodat je het kunt gebruiken in contexten waarvoor die interface vereist is.
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();Casten met arrays
Arraytypen vormen een eigen hiërarchie. Een String[] is een subtype van Object[]. Voor arrays gelden bij casten dezelfde regels als voor objecten.
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-commercevoorbeeld: betaalroutering
Een voorbeeld uit de praktijk: routeren naar de juiste betaalverwerker op basis van het type van de betaling tijdens runtime.
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));Casten naar Number voor algemene rekenkunde
Met het supertype Number kun je algemene numerieke bewerkingen uitvoeren op elk getaltype door naar Number te upcasten en doubleValue() aan te roepen.
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.5Veilige hulpmethode voor casten
Een herbruikbare hulpmethode die een lege Optional teruggeeft in plaats van een uitzondering te gooien bij onjuiste casts — ideaal voor code in pijplijnstijl.
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
);Veelgemaakte fouten om te vermijden
Let op deze veelgemaakte fouten bij casten:
- Vergeten te casten vóór het delen:
int/intlevert altijd een geheel getal op - Downcasten zonder instanceof-controle → ClassCastException
- Upcasten (veilig) verwarren met downcasten (riskant)
- Wrappertypen casten:
(int) longValtegenoverlongVal.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); // 1234567890123Korte controle
Wat is de uitvoer van deze code?
int a = 7; int b = 2; double result = (double) a / b; System.out.println(result);
Samenvatting: typecasten in de praktijk
Belangrijkste punten:
- Upcasten (subtype → supertype) is impliciet en altijd veilig
- Downcasten (supertype → subtype) vereist een expliciete cast; gebruik eerst instanceof
- Patroonmatching met instanceof combineert controle en cast in één expressie
- Cast de teller naar double voordat je deelt om afkappen van gehele getallen te voorkomen
- Gebruik switch-patroonmatching voor overzichtelijke routering op basis van type
- Bouw veilige safeCast-hulpmethoden om met Optional te werken in plaats van met uitzonderingen
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “Typecasting in de praktijk” gratis?
Ja — de volledige tekst van “Typecasting in de praktijk” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.
Wat leer ik in “Typecasting in de praktijk”?
Pas typecasting toe in praktijksituaties, waaronder numerieke berekeningen en OOP-hiërarchieën. Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Typecasting in de praktijk”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Primitieve typen versus referentietypen
- Widening- en narrowing-conversies
- De instanceof-operator
- Typecasting in de praktijk