Envoyé par
austin P.
et puis si on y tiens on peut encore s'en sortir avec des generics
Mouais...
C'est une solution mais elle a encore plus de limite je trouve :
On connait le type de T mais là on n'est pas sûr que cela correspond à this, alors que dans la proposition cela pourrait être vérifié par le compilateur.
Je veux dire par là que j'attend de cette proposition qu'un code comme celui-ci génère une erreur :
1 2 3 4 5 6 7 8 9 10
|
public MaClasse {
public This doSomething() {
// ...
return new MaClasse(); // ERREUR
}
} |
car la seule valeur de retour doit être this.
Dans ton exemple avec les Generics cela n'est pas garantit et le sens est donc un tout petit peu différent...
De plus cela alourdit le code si on utilise directement Buffer :
Buffer<Buffer> buffer = new Buffer<Buffer>();
Et le problème se retrouve également dans la classe ByteBuffer car si on veut toujours permettre cela aux classes filles il faudrait faire ceci :
1 2 3
| class ByteBuffer<T extends ByteBuffer> extends Buffer<T> {
ByteBuffer put(int data) {return null; }
} |
Et ainsi de suite...
a++
Partager