es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar la declaración if else en el constructor de Java.

Estoy intentando sobrecargar un constructor en Java. Hay dos Strings entre sus variables, lo que es problemático si escribo dos constructores separados en el caso de que solo se llame a uno de estos strings. Es por eso que me gustaría usar el siguiente código:

public Timbre(String string){
if(string.indexOf("-") == -1){
this, ANNEE_COURANTE, string, VALEUR_TIMBRE_DEFAUT);
} else{
this(string, ANNEE_COURANTE, PAYS_DEFAUT, VALEUR_TIMBRE_DEFAUT);
}
}

Sin embargo, VSC me dice que “La llamada al constructor debe ser la primera instrucción en un constructor”. ¿Cómo puedo superar este problema?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para superar este problema, puedes crear un método privado separado que inicialice el objeto Timbre con los parámetros dados y llamarlo desde ambos constructores. Aquí hay un ejemplo:

    public class Timbre {
        private int annee;
        private String pays;
        private String valeur;
    
        private static final int ANNEE_COURANTE = 2021;
        private static final String PAYS_DEFAUT = "FR";
        private static final String VALEUR_TIMBRE_DEFAUT = "0.55 EUR";
    
        public Timbre(String string) {
            if (string.indexOf("-") == -1) {
                init(ANNEE_COURANTE, string, PAYS_DEFAUT, VALEUR_TIMBRE_DEFAUT);
            } else {
                String[] parts = string.split("-");
                if (parts.length == 2) {
                    init(Integer.parseInt(parts[0]), parts[1], PAYS_DEFAUT, VALEUR_TIMBRE_DEFAUT);
                } else {
                    // manejar entrada inválida
                }
            }
        }
    
        public Timbre(int annee, String pays, String valeur) {
            init(annee, pays, valeur, VALEUR_TIMBRE_DEFAUT);
        }
    
        private void init(int annee, String pays, String valeur, String valeurDefaut) {
            this.annee = annee;
            this.pays = pays;
            this.valeur = valeur != null ? valeur : valeurDefaut;
        }
    
        // otros métodos
    }
    

    En este ejemplo, tenemos un método privado init que establece los valores de los campos del objeto. Llamamos a este método desde ambos constructores en lugar de inicializar los campos directamente. De esta forma, podemos evitar repetir el código para establecer los valores y aún así tener diferentes constructores con diferentes listas de parámetros.

Comments are closed.