Есть ли какой-либо безопасный оператор навигации для арифметики в Groovy или Java? - PullRequest
0 голосов
/ 21 октября 2011

Следующая строка кода содержится в одном из моих if утверждений:

$("#dateOfTransaction_month").val() != "${loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH) + 1}"

Поскольку управление датой / временем в Java является таким беспорядком, я должен написать + 1, чтобы получить правильный месяц.Проблема в том, что иногда объект payment может не существовать, поэтому я бы сказал: null + 1.Это дает мне ошибку Cannot invoke method plus() on null object.Есть ли какой-нибудь аккуратный способ (аккуратный что-то вроде оператора безопасной навигации Groovy ), я могу объяснить возможность нулевого объекта payment в операторе if, или я вынужден проверить, чтобы увидетьесли значение равно нулю перед оператором if?

Ответы [ 4 ]

7 голосов
/ 21 октября 2011

Groovy добавляет метод Date () к Date, который вызывает оператор +.Вы можете напрямую позвонить себе и связать с ним оператора безопасной навигации.

$("#dateOfTransaction_month").val() != "${loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH)?.plus(1)}"

http://groovy.codehaus.org/groovy-jdk/java/util/Date.html#plus(int)

1 голос
/ 21 октября 2011

На той же странице, на которую вы ссылались, на самом деле прямо выше, находится оператор Элвиса (some-возможно-null-value?: Default).С помощью Elvis вы можете назначить значение по умолчанию, которое хотите использовать.

например,

$("#dateOfTransaction_month").val() != "${(loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH) ?: 0) + 1}"

Который по умолчанию будет январь

0 голосов
/ 21 октября 2011

Это одна вещь, которая мне действительно нравится в Groovy, когда я играл с ним,? оператор, который автоматически проверяется на нулевые ссылки.

В Java такого нет, просто нужно протестировать любую иерархию объектов, которую вы просматриваете, чтобы проверить нулевые значения:

if (object1 != null && obecjt1.obecjt2 != null && object1.object2.object3 != null)
    do_something_awesome_with(object1.object2.object3);

Тем не менее, ваш пример всегда будет вызывать проблемы, потому что Groovy? оператор просто останавливает ваш обход, когда встречает нулевую ссылку и возвращает нулевое значение.

0 голосов
/ 21 октября 2011

Чтобы решить проблему работы с надоедливыми API дат и календаря Java, вы можете проверить JodaTime . С мечтой работать по сравнению со встроенным API.

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