[JAVA] abstract et static en même temps

Fermé
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - Modifié par KX le 30/05/2011 à 17:38
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 30 mai 2011 à 19:24
Bonjour,

J'ai un problème car je n'arrive pas à imposer dans une classe abstraite que toutes les classes filles implémentent une méthode qui ne dépendent d'aucun objet (donc static)

Voici un code simplifié :

public abstract class P 
{ 
    public abstract static P aleatoire(int n); 
} 

public class Q extends P 
{ 
    public Q(...) { ... } 

    public static P aleatoire(int n) 
    { 
       return new Q(...); 
    } 

    public static void main(...) 
    { 
        P p = Q.aleatoire(5); 
    } 
}
J'ai essayé de faire un constructeur pour remplacer ma méthode aléatoire, mais on ne peux pas non plus faire de constructeur abstrait...

public abstract class P 
{ 
    public abstract P(int n); 
} 

public class Q extends P 
{ 
    public Q(int n) { ... } 

    public static void main(...) 
    { 
        P p = new Q(5); 
    } 
}
Le mieux que j'arrive à faire pour me rapprocher de mon problème c'est d'enlever le static, mais le problème c'est que je suis obligé d'instancier un objet pour utiliser ma méthode alors que celle-ci n'utilise pas l'objet d'appel.

public abstract class P 
{ 
    public abstract P aleatoire(int n); 
} 

public class Q extends P 
{ 
    public Q(...) { ... } 

    public P aleatoire(int n) 
    { 
       return new Q(...); 
    } 

    public static void main(...) 
    { 
        P p = new Q(...).aleatoire(5); 
    } 
}

Y a-t-il quelqu'un qui connaîtrait une manière élégante de résoudre mon problème ?
Je vous remercie d'avance de votre aide.

Remarque :
Précédemment j'ai simplifié le code, actuellement mes classes sont plutôt comme ceci :

public abstract class P<E extends C> 
{ 
    public abstract P<E> aleatoire(int n); 
} 

public class Q extends P<E>
{ 
    public Q(...) { ... } 

    public P<E> aleatoire(int n) 
    { 
       return new Q(...); 
    } 

    public static void main(...) 
    { 
        P<E> p = new Q(...).aleatoire(5); 
    } 
}

La confiance n'exclut pas le contrôle
A voir également:

1 réponse

KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 30/05/2011 à 19:32
J'ai plus ou moins réussi à compiler en bidouillant un truc tout moche.
Mais à l'exécution ça plante à cause du cast de Object...

public abstract class P 
{ 
    protected abstract P aleatoireAux(int n); 

    public static P aleatoire(int n) 
    { 
        return ((P) new Object()).aleatoireAux(n); 
    } 
} 

public class Q extends P 
{ 
    public Q(...) { ... } 

    protected P aleatoireAux(int n) 
    { 
       return new Q(...); 
    } 

    public static void main(...) 
    { 
        P p = (P) P.aleatoire(5); 
    } 
}

La confiance n'exclut pas le contrôle
0

Discussions similaires