null! = null - есть идеи, как изменить код или предотвратить это? - PullRequest
0 голосов
/ 14 января 2011

В настоящее время выполняется отладка, и найдено выражение if, которое без всякой (я думал ...) причины дало мне NPE, очевидно, по причине.Похоже, что это утверждение оказалось if(false && (null != null || null != Color)).

if(destination != null && (destination.getPiece() != null || destination.getPiece().getColour() != pieceColour)) - оператор if

Оба пункта назначения могут быть нулевыми и кусочками может быть.Метод getColour () возвращает атрибут типа Color из куска, который должен быть нулевым, если кусок является нулевым.Кусок в месте назначения имеет другой атрибут pieceColour, чем тот, который содержится в операторе if.

В частности, как мне переставить (destination.getPiece ()! = Null)?

Ответы [ 5 ]

3 голосов
/ 14 января 2011

Логика во второй части утверждения очень запутана.

getPiece().getColour() недопустимо, если getPiece() равно нулю и наоборот.

Другими словами, destination.getPiece() == null => destination.getPiece().getColour() - это NPE. Точно так же, destination.getPiece().getColour() является чем-либо => destination.getPiece() != null

Единственное, что имеет для меня смысл:

if( destination != null && (destination.getPiece() == null || destination.getPiece().getColour() != pieceColour))

То есть пункт назначения не является нулевым, и либо фрагмент является нулевым, либо другого цвета.

2 голосов
/ 14 января 2011

Другие ответы работают, но для ясности я бы предложил сохранить результат destination.getPiece() в локальной переменной:

if (destination != null)
{
    Piece piece = destination.getPiece();

    if (piece == null || piece.getColour() != pieceColour))
    {
        // Do stuff.
    }
}
1 голос
/ 14 января 2011

Самый простой ответ - разделить это на два оператора if:

if(destination != NULL)
{
  if(destination.getPiece() != null || destination.getPiece().getColour() != pieceColour)
  {
    //Do stuff
  }
}
1 голос
/ 14 января 2011
Object obj = destination.getPiece();

если obj is null, то (obj! = Null) возвращает false, но при проверке obj.getColor () выдает NullPointerException . Вот почему так должно быть:

if(destination != null && (destination.getPiece() != null && destination.getPiece().getColour() != pieceColour))
0 голосов
/ 14 января 2011
destination.getPiece() != null || destination.getPiece().getColour() != pieceColour

Должно быть:

destination.getPiece() != null && destination.getPiece().getColour() != pieceColour
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...