Как мне вызвать один конструктор из другого в Java?

$obj=json_decode($json);  
echo $obj->id; //prints 1  
echo $obj->name; //prints foo

Чтобы поставить этот массив, просто сделайте что-то вроде этого

$arr = array($obj->id, $obj->name, $obj->email);

Теперь вы можете использовать это как

$arr[0] // prints 1
2093
задан James A. Rosen 12 November 2008 в 20:16
поделиться

3 ответа

Да, это возможно:

public class Foo {
    private int x;

    public Foo() {
        this(1);
    }

    public Foo(int x) {
        this.x = x;
    }
}

Для объединения в цепочку к конкретному конструктору суперкласса вместо одного в том же классе используйте super вместо this. Обратите внимание, что можно только объединить в цепочку одному конструктору , и это должен быть первый оператор в теле конструктора .

Видят также этот связанный вопрос , который является о C#, но где те же принципы применяются.

2815
ответ дан Community 13 November 2008 в 06:16
поделиться
  • 1
    Попробованный это, но к сожалению мое дерево вызова все еще разоблачает только шестнадцатеричные адреса. – jowie 18 June 2013 в 21:10

Используя this(args). Предпочтительный шаблон должен работать от самого маленького конструктора к самому большому.

public class Cons {

    public Cons() {
        // A no arguments constructor that sends default values to the largest
        this(madeUpArg1Value,madeUpArg2Value,madeUpArg3Value);
    }

    public Cons(int arg1, int arg2) {
       // An example of a partial constructor that uses the passed in arguments
        // and sends a hidden default value to the largest
        this(arg1,arg2, madeUpArg3Value);
    }

    // Largest constructor that does the work
    public Cons(int arg1, int arg2, int arg3) {
        this.arg1 = arg1;
        this.arg2 = arg2;
        this.arg3 = arg3;
    }
}

можно также использовать позже защищенный подход valueOf или только:

public class Cons {
    public static Cons newCons(int arg1,...) {
        // This function is commonly called valueOf, like Integer.valueOf(..)
        // More recently called "of", like EnumSet.of(..)
        Cons c = new Cons(...);
        c.setArg1(....);
        return c;
    }
} 

Для вызова суперкласса используйте super(someValue). Вызов к супер должен быть первым вызовом в конструкторе, или Вы получите ошибку компилятора.

233
ответ дан 6 revs, 4 users 74% 13 November 2008 в 06:16
поделиться

Да, можно назвать конструкторов от другого конструкторами. Например:

public class Animal {
    private int animalType;

    public Animal() {
        this(1);
    }

    public Animal(String animalType) {
        this.animalType = animalType;
    }
}

можно также читать в деталях от Конструктор, Объединяющий в цепочку в Java

0
ответ дан 22 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: