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();
}
} |
Partager