KamoCRM

Nuovo tavolo 500'd su un ternario che ha sbloccato un pulsante null

FixMediaService
Spegnimento
8 settembre 2026 alle ore 14:58 UTC
Autore
Kamo
Impegno
4d9a71f

Premendo Nuovo tavolo ha risposto 500: NullPointerException: Non può invocare "java.lang.Integer.intValue()" perché il valore di ritorno di HoldemTable.getButtonSeat() è null E' il momento giusto. HoldemHand.button Seat` è un `int` primitivo; `HoldemTable.button Il sedile è un nullable `Integer`, perché un tavolo non ha pulsante finché non si tratta di una mano. Scritto come `hand!= null ? hand.getButtonSeat() : table.getButtonSeat()`, JLS 15.25 applica la promozione numerica binaria ai due rami e non caselle BOTH — così il espressione chiama `.intValue()` sul tavolo null prima che il risultato sia mai assegnato. Dichiarare la variabile `Integer` non aiuta: il non-boxing avviene all'interno dell'espressione condizionale, e l'assegnazione solo riscatta ciò che sopravvive. Un se/else ora, con un commento dicendo perché, perché il ternario è esattamente il "semplificazione" qualcuno avrebbe raggiunto. Questa è stata la prima cosa che fa chiunque con la funzione, e ha spedito. Ogni il test esistente aveva una mano in corso; non uno ha costruito una vista per l'unico stato il tavolo nuovo di zecca è sempre dentro. `HoldemTableViewTest` costruisce tre di loro — vuoto, seated-but-not-dealt, e il riepilogo della lobby — e ho confermato tutte e tre le riproduzioni la produzione NPE verbatim contro il ternario prima di ripristinare la correzione. Perde anche due cose che il pulsante null non deve essere permesso di inventare: nessun rivenditore e nessun marcatore cieco su un tavolo che non ha trattato, e nessun portafoglio giro per una fila di lobby.

Tutte le modifiche

Come quello che vedi la spedizione?

Tutto questo arriva nel vostro spazio di lavoro da solo. Iniziare sul piano gratuito e leggere di nuovo questa pagina in un mese.

Inizia gratis per sempreVisualizza il prezzo