2013-06-21 9 views
8

Netbeans IDE è in grado di individuare il codice che potrebbe causare problemi. Perché un monito a non rilasciato perNetbeans IDE che non emette avvisi sui metodi chiamati in costruttori

public class Base 
{ 
    Base(...) 
    { 
     ...; 
    } 

    public void foo() 
    { 
     ...; 
    } 
} 

public class Child extends Base 
{ 
    Child(...) 
    { 
     super(...); 
     foo(); 
    } 
} 

dato che sto chiamando la funzione foo classe di base() nel costruttore bambino? Naturalmente questo è perfettamente legittimo in quanto l'oggetto base è costruito dal punto foo(), ma a foo() è implicitamente un metodo virtuale, quindi in realtà mi aspetterei un avvertimento a meno che foo() non venga contrassegnato come finale.

Penso che l'IDE dovrebbe emettere un avviso se si chiama qualsiasi funzione di classe base da un costruttore di classe figlio che non è contrassegnato come finale.

+0

Significa che 'foo()' è astratto? 'abstract void foo();'? – NINCOMPOOP

+0

No per niente. Ha implementazione. Modificherò la domanda per chiarire. – Bathsheba

+0

Considera di presentare un problema, se pensi che sia un bug: https://netbeans.org/community/issues.html – Puce

risposta

2

Lo fa.
Quando si apre il file in NetBeans, si dovrebbe vedere una lampadina gialla (indicatore di suggerimento) accanto alla chiamata a foo. E 'un suggerimento che si sia:

  • Rendi finale
  • Fai foo finale, privato, o statico

Se si vuole che sia più evidente, andare a Tools > Options, o Edit > Preferences, o Netbeans > Preferences (dipende dal tuo sistema operativo).
Scegliere Editor
Scegliere Hints
Set Language-Java
Expand Initialization
Selezionare Problematic call in the constructor
Change Show as-Error
Clicca OK

Ora la linea così come il vostro file sarà ottenere un badge rosso errore .

Nota, nessuna di queste sarà impedire di ignorare l'indicatore. Il codice è ancora legale Java, quindi NB non ti impedirà di compilare.

Problemi correlati