static members in abstracte klasses

Ik was op de trein bezig met me forum in JSP te maken. Laat me beginnen bij me ontwerp. Ik heb een abstracte klasse Bericht die ID, titel en bericht hebben als members. Een klasse Topic en Reactie die van Bericht overerven. Aangezien Topic en Reactie aparte klasses zijn moet de ID van de eerste topic starten van nummer 1 en idem dito voor Reactie. Ik zal even de code tonen van hoe ik het ongeveer eerst had.

public class abstract Bericht {

public int id;

public static int nextId = 1;

protected Bericht() { id = nextId++; }

}

public class Topic extends Bericht {

public Topic() { super(); }

}

public class Reactie extends Bericht {

public Reactie() { super(); }

}

Wanneer ik de volgende main code uitvoer…

public static void main( String [] args ) {

Topic t = new Topic();
Reactie r = new Reactie();

System.out.println(“ID van topic: ” + t.id);
System.out.println(“ID van reactie: ” + r.id);

}

… krijg ik volgende output.

ID van topic: 1
ID van reactie: 2

Nu wilde ik die ID van reactie ook gelijk aan 1. Na logisch nadenken is die statische member nextId een member van Bericht en niet één per subklasse. Nu dacht ik om die nextId te plaatsen per subklasse en in de super constructor die statische member van de subklasse op te roepen. Helaas helaas (jawel driemaal helaas) kan Java dit niet toestaan. Driemaal hoera voor PHP want sinds versie 5.3 ondersteunen zij late static binding waardoor de statisch member van de subklasse wordt aangeroepen en niet die van de super klasse.

Daarom een oproep aan Java: introduceer late static binding!

Ik heb dit nu moeten oplossen door de id eigenschap van de super klasse te plaatsen per sub klasse.

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: