2014-02-04 2 views
7

У меня есть функция в одном из моих классов, которая сравнивает себя с другим экземпляром того же класса - и выясняет, какие переменные отличаются. Это делается для минимизации сетевой нагрузки с основной базой данных (путем загрузки только тех данных, которые необходимо загрузить, вместо загрузки всего объекта).Сравнение двух объектов, любое из которых может быть нулевым

Для этого я пытаюсь использовать функцию object.equals() для сравнения двух объектов.

Вскоре я обнаружил, что object.equals() не обрабатывает null, и после прочтения this question, я понимаю, почему.

Так пример моего разбитого кода выглядит следующим образом:

public class MyObject { 

    String myString; 
    String myString2; 

    public String getChangedVars(MyObject comparisonObj) { 
     ArrayList<String> changedVars = new ArrayList<String>(); 

     if (!this.myString.equals(comparisonObj.myString)) 
      changedVars.add("myString"); 
     if (!this.myString2.equals(comparisonObj.myString2)) 
      changedVars.add("myString2"); 

     return changedVars.toString(); 
    } 
} 

Мой вопрос - на том основании, что либо одна из переменных сравниваемых может быть нулевым, что простой способ сравнить две переменные, избегая NullPointerException?

Edit: Просто проверка нуль на обоих объектах первый не работает хорошо, как я еще хочу сравнить, если объект имеет ссылку или нет. Например, если один элемент равен null, а другой нет, я хочу, чтобы это разрешилось до true, так как переменная изменилась.

+1

Сначала проверьте на 'null' на обоих объектах. –

+0

Java 7: java.util.Objects.equals (Object a, Object b) – Seelenvirtuose

ответ

20

Существует новый класс утилиты доступен в JDK 1.7, так что это Objects.

Этот класс состоит из статических методов полезности для работы на объектах . Эти утилиты включают нулевые или нулеустойчивые методы для вычисления хеш-кода объекта, возвращающего строку для объекта и сравнение двух объектов.

Вы можете использовать Objects.equals, он обрабатывает null.

Objects.equals (Object a, Object b) Возвращает true, если аргументы равны друг другу, а false в противном случае. Следовательно, если оба аргумента равны нулю, возвращается true , и если только один аргумент равен null, возвращается false. В противном случае равенство определяется с помощью метода equals первого аргумента .

if(Objects.equals(myString,myString2)){...} 
+2

Aah .. Что-то новое. +1. –

+0

Какой позор, это решение здорово - к сожалению, у меня нет доступа к классу «Объекты» в Android, однако, поскольку я не указал, что это вопрос Android (я честно не думал, что это было релевантный) - тогда я все равно соглашусь с этим ответом. Благодаря! –

0
if (this.myString != null && this.myString.equals(comparisonObj.myString)) 
{ 
       changedVars.add("myString"); 
} 
0

Используйте StringUtils предоставленного апача

StringUtils.equals(myString,comparisonObj.myString); 
0

Вы можете использовать объект Apache Utils

ObjectUtils.equals(Object object1, Object object2) - Возвращает булево

этот метод был заменен java.util.Objects.equals (Object, Object) в Java 7

Смежные вопросы