Старайтесь избегать использования 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
для него (и проигнорировать результат операции 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)