2016-10-02 1 views
0

Je suis en train de doubler un tableau dans un contexte non statique de la manière suivante:Problème avec initialisation variable lorsque non statique

public class Test { 
    int[] data=new int[1]; 

    public void Double(){ 
     if(data == null){ 
      int[] data=new int[1]; 
     } 
     int[] data=new int[data.length*2]; 
    } 

    public static void main(String[] args){ 
     Test table = new Test(); 
     table.data=new int[1]; 
    } 
} 

Le javac ne compilera pas parce qu'il me prévient que

données variables pourraient ne pas avoir été initialisé

Même si elle a évidemment été initialisé, comment puis-je contourner cela?

Répondre

2

Vous déclarez une variable locale data dans votre méthode Double() (en fait, vous déclarez deux variables de ce type), ce qui masque la variable d'instance ayant le même nom.

Par conséquent, dans la déclaration:

int[] data=new int[data.length*2]; 

Vous accédez à data.length avant la variable data locale est initialisé.

Modifier à:

public void Double(){ 
    if(data == null){ 
     data=new int[1]; 
    } else { 
     data=new int[data.length*2]; 
    } 
} 
+0

désolé lisait trop superficiellement, et essayer de trouver la mouche dans la soupe. –

+0

@Eran Cela aurait dû s'appeler 'Test'. 'double' est un mot-clé, et donc pas un identifiant, et donc pas un nom de méthode légale. – EJP

+0

@EJP Je n'y ai pas pensé. Cependant, puisque le but de cette méthode est de doubler la longueur du tableau membre, peut-être 'doubleArray()' aurait-il mieux convenir. L'appeler avec le même nom que la classe aurait été source de confusion, car ce n'est pas un constructeur. – Eran

0

Votre code est tout à fait inutile. data ne peut pas être nul au moment où vous le testez, et la ligne suivante où vous déclarez et initialisez une variable locale qui tombe immédiatement hors de portée est également inutile, donc tout le code associé peut être simplement supprimé.