Ответ 1
Старайтесь избегать использования null
в Scala. Это действительно там только для взаимодействия с Java. В Scala используйте Option
для вещей, которые могут быть пустыми. Если вы вызываете метод Java API, который может возвращать null
, немедленно оберните его в Option
.
def getObject : Option[QueueObject] = {
// Wrap the Java result in an Option (this will become a Some or a None)
Option(someJavaObject.getResponse)
}
Примечание. Вам не нужно помещать его в val
или использовать явно
return
в Scala; результатом будет значение
последнее выражение в блоке (фактически, поскольку существует только один оператор, вам даже не нужен блок).
def getObject : Option[QueueObject] = Option(someJavaObject.getResponse)
Кроме того, что уже показали другие (например, вызов foreach
в Option
, который может быть немного запутанным), вы также можете вызвать map
на нем (и игнорировать результат операции с картой, если вы не нужно):
getObject map QueueManager.add
Это ничего не сделает, если Option
является None
и вызывает QueueManager.add
, если это Some
.
Я использую обычный if
, но более понятный и простой, чем любой из этих "трюков", чтобы избежать уровня отступов. Вы также можете просто написать его на одной строке:
if (getObject.isDefined) QueueManager.add(getObject.get)
или, если вы хотите иметь дело с null
вместо Option
:
if (getObject != null) QueueManager.add(getObject)
edit - Бен прав, будьте осторожны, чтобы не называть getObject
более одного раза, если у него есть побочные эффекты; лучше напишите так:
val result = getObject
if (result.isDefined) QueueManager.add(result.get)
или
val result = getObject
if (result != null) QueueManager.add(result)