{java} instanceof en typecasting

In Java komt het wel eens voor dat ik kijk of een object van een bepaalde class afkomstig is met het keyword instanceof. Wanneer ik een methode uit die class wil gebruiken, moet ik die typecasten en dan pas kan ik een methode oproepen. Een voorbeeld. Ik heb een class A met twee childs B en C. In B zit een methode “getBItem()” en in C de methode “getCItem()”. Nu heb ik een class D die een lijst bijhoud van A classes. Tijdens het itereren van mijn lijst in class D, gebruik ik instanceof om te kijken of het object van class B of C komt. In de huidige Java zou dit er als volgt gaan uitzien.

Iterator<A> iterator = getLijst().iterator();

while( iterator.hasNext() ) {
A current = iterator.next();

if( current instanceof B ) {
B currentB = (B) current;
Object item = currentB.getBItem();
} else if( current instanceof C ) {
C currentC = (C) current;
Object item = currentC.getCItem();
}

In een intelligentere compiler zou Java zien dat als een if conditie true oplevert dat current daadwerkelijk een instantie is van class B (of class C) en dat de programmeur niet meer hoeft te typecasten. Zo zou het eruit zien.

Iterator<A> iterator = getLijst().iterator();

while( iterator.hasNext() ) {
A current = iterator.next();

if( current instanceof B ) {
Object item = current.getBItem();
} else if( current instanceof C ) {
Object item = current.getCItem();
}

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

%d bloggers op de volgende wijze: