【发布时间】:2015-05-17 00:52:52
【问题描述】:
我正在阅读这篇关于将 Optionals 用于方法参数的帖子,而共识似乎是永远不要将它们用于此目的。
Guava Optional as method argument for optional parameters
但是在 API 端(而不是应用端)是否存在此规则的例外情况?我想不出一种更简洁的方法来处理某些情况,尤其是在可能使用或不使用参数参数的初始化情况下。
以我正在构建的这个枚举为例,它提供了我们的业务使用的四个数据库连接。前三个不需要参数,因为DbManager 工厂已经拥有它需要的配置信息。但是 SQLite 连接需要一个正在使用的 SQLite 数据库的 URL。因此,我需要将我的Supplier 变成Function<Optional<String>,DatabaseConnection>。
使用Optional 作为方法参数是否合法?如果不是,我怎样才能使这个可枚举?
private static enum DbConnectionSupplier {
ORACLE(optArg -> DbManager.getOracleConnection()),
MYSQL(optArg -> DbManager.getMySQLConnection()),
TERADATA(optArg -> DbManager.getTeradataConnection()),
SQLITE(optArg -> DbManager.getSQLiteConnection(optArg.get()));
private final Function<Optional<String>, DatabaseConnection> supplier;
private DbConnectionSupplier(Function<Optional<String>, DatabaseConnection> supplier) {
this.supplier = supplier;
}
}
【问题讨论】:
-
基本上使用
Optional作为方法参数会使调用者的事情变得笨拙。另见:stackoverflow.com/questions/23454952/uses-for-java8-optional/…
标签: java java-8 guava optional