Целочисленный тип && Null in java - PullRequest
1 голос
/ 28 июня 2010

У меня есть такой класс:

class node 
{
    Integer id ; 
    double lon;
    double lat ; 
    ..... 
}

В другом классе есть метод, который принимает аргументы из класса узла и выполняет с ними некоторую операцию .... В этом методе есть условие, подобное(node1.getId == node2.getId) ...

Теперь мне нужно дать этому методу аргумент node1, node2, где id узла1 = null .. когда он сравнивается между (node1.getId == node2.getId), исключение NullpointerException ...

Существует ли в Java целочисленный тип, который позволяет сравнивать его объекты с нулевым значением ??как "int?" в C # ..

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

Дополнительная информация о том, что, вероятно, произошло.

Из вашей ошибки, я предполагаю, что ваш предыдущий получатель был:

public int getId() {
    return id; //Integer, needs to be converted
}

Java заставила вас изменить Integer в intи то, что на самом деле вызывалось, было:

public int getId() {
    return id.intValue(); //Get the actual "int" value from the object
}

Вот почему вызов этого метода с нулевым идентификатором привел к возникновению исключения NullPointException, даже до того, как вы смогли получить значение.Поскольку для этого идентификатора был вызван метод, прежде чем вы смогли получить к нему доступ.

Это частая ловушка, поскольку они допускают такое прозрачное преобразование из Integer в int и наоборот.Это удобно, но трудно диагностировать, если вы не знаете, что происходит за кулисами.

2 голосов
/ 28 июня 2010

Нет, ничего подобного ? нет. Если есть возможность для null, вы должны проверить его.

Итак,

if (node1 == null || node2 == null) {
   return false;
}
1 голос
/ 29 июня 2010

Я полагаю, вы можете использовать класс Integer вместо типа int. Вот пример:

public class myClass {
  Integer id;
  public myClass() {
     // A constructor with no arguments
     id = null;
  }
  public void setId(int val) {
     id = new Integer(val);
  }
  public Integer getId() {
     return Id;
  }
}

Ссылка для класса Integer находится здесь: http://java.sun.com/javase/7/docs/api/java/lang/Integer.html

Обратите внимание, что метод getId возвращает объект Integer, который может быть нулевым объектом. Таким образом, можно оценить что-то вроде if(getId()==null) {...}

Надеюсь, это полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...