2015-04-23 17 views
5

Quindi questa è solo una parte del mio codice, e l'intero programma compila e funziona, ma continuo a ricevere "la variabile locale nasconde un campo" accanto alle righe di tre righe consecutive che iniziano con "GameBoard myBoard = this.getGameBoard() ;. sono solo curioso che cosa significa in realtà e se sta facendo nulla per il mio programma a lungo termineQual è il significato della variabile locale nasconde un campo?

public void initialze(){ 
    myBoard = getGameBoard(); 
    obstacleLocations = myBoard.getObstaclePositions(); 
    pastureLocations = myBoard.getPasturePositions(); 

GameBoard myBoard = this.getGameBoard(); 
    ArrayList<GameLocation> obstacleLocations = myBoard.getObstaclePositions(); 
    ArrayList<GameLocation> pastureLocations = myBoard.getPasturePositions(); 
    GameLocation closestPasture = pastureLocations.get(0); 
    GameLocation closestObstacle = obstacleLocations.get(0); 
+2

È perché stai riutilizzando i nomi delle variabili. Presta attenzione alla tua denominazione ed evita i duplicati. – CubeJockey

risposta

12

Vuol dire che hai due variabili differenti con lo stesso nome -.. myBoard Uno di loro è un campo nella tua classe.Un altro è una variabile locale, cioè una che hai dichiarato all'interno di un metodo

È una cattiva idea avere due variabili con lo stesso nome. il tuo codice molto confuso e difficile da mantenere.

+0

Quindi è una soluzione per rimuovere semplicemente le variabili all'interno del metodo o della classe e basta averle contenute in uno dei due? – MikeV

+0

No, basta dare loro nomi diversi – ControlAltDel

+0

Dipende da cosa 'getGameBoard()' fa. Se tutto ciò che fa è "return myBoard", allora dovresti rimuovere entrambe le righe 'myBoard = getGameBoard();' (che non fa nulla) e 'GameBoard myBoard = getGameBoard();' (che è la linea che causa il tuo problema) . –

1

La variabile locale in un metodo è sempre la variabile con la massima visibilità. Ecco perché in un setter classe che si sempre fare qualcosa di simile:

void setId(String id) { 
    this.id = id; 
} 

Il this.id dice Java per assegnare il id (dal parametro) per la variabile del campo. Ecco perché questa non funziona:

void setId(String id) { 
    id = id; 
} 

Dal momento che assegniamo id a se stesso.

È possibile leggere sull'ambito, vedere: http://www.java-made-easy.com/variable-scope.html per un esempio.

+0

Grazie mille; apprezzalo. – MikeV

+0

Puoi sempre votare una risposta che ritieni utile e accettare qualsiasi risposta alla tua domanda che sembra rispondere correttamente al tuo problema. – JFPicard

Problemi correlati