2012-05-04 9 views
5

quando controllo se l'istanza di StoredCredential è nulloChe cosa causa "tipi di operando errati per l'operatore binario" == "" con il secondo tipo <nulltype>?

if(storedCredential != null){ 
    //do something 
} 

Netbeans 7.1 mostra il seguente avviso:

bad operand types for binary operator '==' 
    first type: com.blah.dbcore.mypublic.beans.StoredCredential 
    second type: <nulltype> 

Compila correttamente e non genera RuntimeExceptions, ma Netbeans mostra ancora l'avviso. Controllare se l'istanza non è nulla, con '! =', Dà lo stesso errore.

Il seguente codice fa la stessa cosa, ma è molto meno chiara:

if (!(storedCredential instanceof StoredCredential)) { 
    //do something 
} 

Netbeans non ha alcun problema con questa espressione.

Poiché non ha problemi nella compilazione, presumo ci sia qualcosa di sbagliato nel modo in cui ho aggiunto il .jar che contiene la classe alla libreria. Questo è l'unico problema che sto avendo con questo jar, nessun'altra classe in questo .jar mi dà questo problema.

+2

prima di tutto, probabilmente si intende 'netbeans 7.1' not' netbeans 1.7'. ma qual è il tipo di storedCredential? – alegen

+0

Se il tuo errore menzionava ad esempio l'operatore '| =', allora tutto sarebbe chiaro dal momento che si opera solo su numeri e booleani. –

+0

@alegen Oops, sì, netbeans 7.1, risolto: P Il tipo è StoredCredential estende Bean, che è un Oggetto che implementa Serializable, niente di speciale, penso. Ho notato un campo transitorio nella classe Bean, ma non penso che questo darebbe questo tipo di problema. – MarcoPogo

risposta

2

Ho riscontrato questo problema. Inoltre, dove ho cercato di passare un'istanza della classe problema in un metodo che ha accettato un oggetto come parametro, ho ottenuto il seguente errore:

required: String,Object 
found: String,SomeClass 
reason: actual argument SomeClass cannot be converted to Object by method invocation conversion 

Si è rivelato il compilatore è stato in grado di determinare il tipo corretto di mia classe.

La mia classe (chiamiamolo com.blah.lib.SomeClass) era in un progetto NB (chiamiamolo Progetto 1) ed estesa di una classe in un barattolo 3rd party, che era una libreria per progetto 1.

Un altro progetto NB (chiamiamolo Progetto 2) dipendeva dal Progetto 1 e utilizzava com.blah.lib.SomeClass, ma non aveva il contenitore di terze parti nelle sue librerie, quindi durante la compilazione del Progetto 2, il compilatore non era in grado di determinare la piena ereditarietà di com.blah.lib.SomeClass.

Quindi la soluzione era aggiungere il vaso di terze parti alle librerie del progetto 2.

So che questo è vecchio di anni, ma ho pensato di pubblicare questa risposta nel caso in cui aiuti qualcun altro a cercare su Google il problema in futuro.

+0

Oh wow, avevo dimenticato che questa domanda era ancora aperta, ma questa era davvero la soluzione. Grazie! – MarcoPogo

0

Netbeans ti sta dicendo che in quel punto del programma, storedCredential non può essere nullo. Questo probabilmente significa che hai già chiamato un metodo o hai eseguito l'accesso a un membro dati su storedCredential in precedenza in quel metodo.

Problemi correlati