Bonjour,

J'ai une classe Access ayant une méthode returnThis() qui renvoie this.
Je voudrais que la méthode (new Access2()).returnThis() de la classe fille Access2 renvoie un Access2.
Ci dessous un exemple GAccess avec des types génériques.

Y'avait-il plus simple ? Puis-je éviter le Type safety warning lors du cast {return (T) this;} ?

Merci d'avance.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
public class demoSubCastReturnThis {
	/* Usual class defining method returning this */
	public static class Access {
		public Access returnThis() {return this;}
	}
	/* Goal: How to make Access2().returnThis() return an Access2 */
	public static class Access2 extends Access {		
	}
 
	/*  generic works, but Type Safety issues */	
	public static class GAccess<T extends GAccess<?> > {
	// public static class GAccess<T extends GAccess> {
		public T returnThis() {return (T) this;}
	}	
	public static class GAccess2 extends GAccess<GAccess2> {		
	}
 
	public static void main(String... args) {
		GAccess2 a2= new GAccess2();
		GAccess2 returned2= a2.returnThis();
 
		GAccess<GAccess> a= new GAccess<GAccess>();
		GAccess<GAccess> returned= a.returnThis();
	}
}