Inicializace proměnnou instance s metodou ze třídy

hlasů
0

Mohu inicializovat proměnnou instance v Javě, když se inicializovat, až to prohlásit, a inicializovat ji vrácená hodnota metody, které definuji později ve třídě.

Něco takového:

public class MyClass {

     integers[] myArray = new integers[length()];

     int length() {
     ....

     }
}

length()dá mi nějaké číslo, a chci, aby to číslo pro určení počtu prvků v poli. Zdá se pravděpodobné, ke mně, ale mám NullPointerException(já nevím, zda tato chyba inicializace způsobí výjimku, ale nevím, co přesně znám, a proto, že jsem ještě nikdy tuto inicializaci nedělal, nejsem si jistý, že to je správný ).

Položena 10/02/2009 v 08:43
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
-3

Musíte udělat metoda statické:

static int length() { … }
Odpovězeno 10/02/2009 v 08:49
zdroj uživatelem

hlasů
3

Zdá se, že funguje dobře pro mě, pomocí metody statické nebo ne statické:

public class test
{
    public int[] myarray = new int[this.length()];

    public int length() {
        return 5;
    }

    public static void main(String[] args)
    {
        test foo = new test();
        for (int element : foo.myarray) {
            System.out.println(element);
        }
    }
}

Který produkuje:

0
0
0
0
0
Odpovězeno 10/02/2009 v 08:52
zdroj uživatelem

hlasů
2

Než to uděláte, může to být stojí za zvážení, pokud tato syntaxe může být lehce matoucí, a že by mohlo být vhodnější pro inicializaci pole v konstruktoru, nebo v inicializačním bloku.

private final int[] myArray;

public MyClass() {
    myArray = new int[length()];
}

nebo

private final int[] myArray;
{
    myArray = new int[length()];
}
Odpovězeno 10/02/2009 v 08:54
zdroj uživatelem

hlasů
2

Je pravděpodobné, že problém je někde v length()metodě. Mám podezření, že to se odkazuje na proměnnou, která nebyla náležitě ještě inicializována. Zde je příklad programu, který ukazuje, že:

public class MyClass {

    int[] myArray = new int[length()];

    // This is only initialized *after* myArray
    String myString = "Hi";

    int length() {
        return myString.length();
    }

    public static void main(String[] args) {
        new MyClass(); // Bang!
    }
}

Pokud toto je ten problém, doporučuji vám provést inicializaci v konstruktoru místo - ten způsob, jakým se k objednání je mnohem jasnější.

Odpovězeno 10/02/2009 v 09:37
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more