5 votes

Initialisation d'un tableau à la volée dans un constructeur (Java)

 public class A{
      public A(int[] a){}
 }

 public class B extends A{
      public B(double[] b){
           super({b.length});  //ERREUR
      }
 }

Je veux pouvoir compiler le code ci-dessus. Pour être clair, j'ai la classe A et B qui l'étend. La classe A n'a pas de constructeur sans paramètres. Si je ne mets pas un appel à super dans le constructeur de la classe B à la première ligne, il essaiera d'appeler super(), ce qui n'existe pas. Mais je veux appeler super(int[] a) à la place. Je veux le faire en prenant la longueur d'un tableau double donné et en l'envoyant comme un tableau de longueur 1. Il ne me permet pas de le faire car apparemment vous ne pouvez pas déclarer un tableau comme ça, et si je le déclarais sur une ligne séparée, il appellerait super() en premier et cela ne fonctionnerait pas.

Y a-t-il un moyen de déclarer un int[] de cette manière ? Ou la seule solution ici est de soit faire un constructeur pour A sans paramètres, soit de faire ma propre fonction qui retourne un int[]?

(Ne demandez pas pourquoi je veux l'envoyer comme un tableau de cette manière.)

11voto

corsiKa Points 39442

Si vous insistez pour ne pas demander pourquoi...

Vous pourriez créer le tableau, affecter le premier et seul élément et l'envoyer.

public class B extends A{
      public B(double[] b){
           int[] arr = new int[1];
           arr[0] = b.length;
           super(arr);  // broken, super must be first.
      }
}

Cela signifie que vous devez avoir une solution en une ligne. Heureusement, Java fournit une façon en ligne de transformer une série d'éléments en un tableau au moment de la compilation.

public class B extends A{
      public B(double[] b){
           super(new int[]{b.length});  // FIXED
      }
}

4voto

OscarRyz Points 82553

Oui, essayez :

 super(new int[]{b.length});  //ERREUR PLUS

4voto

irreputable Points 25577

Vous pouvez également

public class A {
    public A(int... a){}
}

public class B extends A {
    public B(double[] b){
        super( b.length );
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X