silasyudi / optional
Java 的 java.util.Optional
v2.0.0
2022-05-14 19:17 UTC
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Java 的 java.util.Optional
类的可移植性到 PHP,并更新了 Java 11 的特性。
摘要
语言 / Idioma
阅读葡萄牙语版本 🇧🇷 这里.
安装
composer require silasyudi/optional
需求
- PHP 7.4+
- Composer
特性
Optional 类封装了一个值,并可以对其进行各种操作。
无 Optional 的示例
/** @var Entity|null $entity */ $entity = $this->repository->find($id); if (!$entity) { throw new SomeException(); } ...
有 Optional 的示例
/** @var SilasYudi\Optional $optional */ $optional = $this->repository->find($id); $entity = $optional->orElseThrow(new SomeException()); ...
差异
由于每种语言的特定性,一些差异无法避免。以下列出了最重要的差异:
- Java 的
Optional.stream()
没有导入此包,因为在 PHP 中没有类似的功能,并且已经具有类似的map
、flatMap
和filter
方法。 Optional.hashCode()
没有导入此包。- Java 的
NullPointerException
和NoSuchElementException
被替换为当 Optional 对象不能为空时为OptionalInvalidStateException
,在尝试将 null 传递到callable
参数时为TypeError
。 - Java 11 中的
Optional.orElseThrow
是重载的,并期望没有参数或一个 Supplier 参数。在此包中,此方法期望一个 Throwable 对象或null
作为参数。 Consumer
、Function
、Predicate
和Supplier
作为callable
导入。