Comment utiliser les constructeurs en java, Android?


J'ai une courte question sur le code suivant de

Http://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/

Ici sont utilisés deux constructeurs, l'un avec l'id, et l'autre sans - je ne comprends pas pourquoi. Quel est l'avantage?

J'ai déjà lu ce fil:

Pourquoi cette classe ont deux constructeurs?

La réponse que je pourrais comprendre est que je peux créer une balise avec id et non, mais je suis essayer de comprendre, comment savoir quel constructeur il doit utiliser? Est - ce juste par le nombre de paramètres?

    public class Tag {

    int id;
    String tag_name;

    // constructors
    public Tag() {

    }

    public Tag(String tag_name) {
        this.tag_name = tag_name;
    }

    public Tag(int id, String tag_name) {
        this.id = id;
        this.tag_name = tag_name;
    }

    // ...     
}
Author: Community, 2015-01-09

3 answers

Oui, seulement par sa quantité de paramètres.

C'est ce qu'on appelle la "surcharge" des fonctions. Vous pouvez surcharger une fonction en fournissant la même signature avec différents paramètres (selon leur type et leur ordre).

Le remplissage de la JVM décide ensuite de la méthode à utiliser dans une certaine situation.

Veuillez noter: Si vous fournissez un constructeur, la JVM ne fournira plus de constructeur par défaut.

class Foo{

private int x;
private String name;

    Foo(int x){      //constructor 1
        this(x, "Default Name");
    }
    Foo(String name){  //constructor 2
        this(0, name);
    }
    Foo(int x, String name){  //constructor 3
        this.x = x;
        this.name = name;
    }
}

Foo f1 = new Foo(9); //calls constructor 1, who will call constructor 3
                     //f1.x = 9, f1.name = "Default Name"
Foo f2 = new Foo("Test"); // calls constructor 2, who will call constructor 3
                          // f2.x = 0; f2.name = "Test"
Foo f3 = new Foo(3, "John"); //calls constructor 3
                             // f3.x = 3; f3.name = "John"

Foo f4 = new Foo()  // This won't work! No default Constructor provided!
 3
Author: Tim Hallyburton, 2015-01-08 21:25:54

* * quel constructeur doit-il utiliser? seulement de sa quantité de paremeters? ** Oui, par exemple Si vous appelez

Tag newTag = new Tag();

Il appellera

 public Tag() {

}

, Mais si vous appelez

 Tag newTag = new Tag("Name");

Il appellera

 public Tag(String tag_name) {

}

Et ainsi de suite

Par combien d'arguments vous passez au constructeur de cette façon, il saura lequel appeler

 0
Author: Abdi, 2015-01-08 21:18:36

Le compilateur sait "quel constructeur il doit utiliser" par une règle, dans la Spécification du langage Java .

Un CV: Est par signature de la méthode (le type et l'ordre des arguments --- les exceptions n'affectent pas la signature, et le type de retour aussi). Ceci n'est pas limité uniquement par le constructeur, mais par n'importe quelle méthode, correctement surchargée; Vous pouvez les étudier par sujet de "Surcharge". La raison de surcharger une méthode - - - ou un constructeur aussi - - -, est de donner plus flexibilité.

 0
Author: Thufir Hawat, 2015-01-08 21:31:38