IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

NoSuchMethod sur constructeur à nombre args variable


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut NoSuchMethod sur constructeur à nombre args variable
    Bonjour,

    Je rencontre un problème que j'aimerai vous soumettre.
    Imaginez une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Toto {
      private Toto() { ....... }
     
      public Toto( SpecialObject obj1, SpecialObject ... objects ) { ........ }
    }
     
    Une classe héritant de Toto
     
    public class Titi extends Toto
    {
       public Titi (OtherObject arg1) {
         super ( new SpecialObject());
      }
    }

    A la compilation, super( new SpecialObject()); identifie bien le constructeur public Toto( SpecialObject obj1, SpecialObject ... objects )

    Mais au runtime, au moment de l'appel du constructeur super(..), une exception NoSuchMethodError est lancée.

    Auriez-vous une explication ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour,
    Ce bout de code m'a l'air tout à fait innoncent. D'ailleurs, je l'ai testé et ça marche pour moi (OpenJDK 6, linux).
    C'est quoi ta config ? (compilo, jre)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    En fait, ça fonctionne en test junit sous eclipse et ligne de commande.
    Le seul point c'est que les 2 classes sont packagées dans 2 jars différents mais bon, ça devrait pas poser de problème à priori.
    c'est assez incompréhensible dans l'immédiat, je penche plutôt vers un problème de clean maven, avec toutes les dépendances du projet c'est une possibilité... Mais ça fait dix fois que je fais la manip en supprimant à la main alors je désespère...

  4. #4
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Hmmm, étrange, cette construction marche chez moi.
    Si j'exécute le bout de code suivant :
    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 Toto {
    	public Toto(SpecialObject obj1, SpecialObject ... objects) {
    		System.out.println("Appel du constructeur Toto avec " + (1 + objects.length) + " arguments");
    	}
     
    	public static class Titi extends Toto {
    		public Titi(OtherObject arg1) {
    			super(new SpecialObject());
    		}
    		public Titi(OtherObject arg1, OtherObject arg2) {
    			super(new SpecialObject(), new SpecialObject());
    		}
    	}
     
    	public static class OtherObject {
    	}
    	public static class SpecialObject {
    	}
     
     
    	public static void main(String[] args) {
    		new Titi(new OtherObject());
    		new Titi(new OtherObject(), new OtherObject());
    	}
     
    }
    J'obtiens la sortie :
    Appel du constructeur Toto avec 1 arguments
    Appel du constructeur Toto avec 2 arguments

    [Edit] J'ai pas été assez rapide sur le coup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2012, 14h55
  2. Réponses: 4
    Dernier message: 05/07/2009, 16h38
  3. Réponses: 0
    Dernier message: 30/10/2008, 12h29
  4. Réponses: 7
    Dernier message: 08/01/2008, 19h43
  5. Réponses: 8
    Dernier message: 14/11/2007, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo