【发布时间】:2015-11-02 22:11:37
【问题描述】:
在 Java 8 中,我正在编写一个 DAO 方法,该方法调用一个返回 ListenableFuture 的方法(在本例中,它是一个返回 ResultSetFuture 的 Cassandra 异步查询)。
但是,我不知道应该如何将 Future 返回给 DAO 方法的调用者。我不能只返回 ResultSetFuture,因为该未来返回一个 ResultSet。我想处理 ResultSet 并返回一个不同的对象。例如:
public ListenableFuture<ThingObj> queryForThingAsync(String thingId) {
ListenableFuture<ResultSet> rsFuture = db.getSession().executeAsync(QueryBuilder.select().all().from("thingSchema","Thing").where(eq("thingId",thingId)));
// Now what? How do I create a ListenableFuture<ThingObj> given a ListenableFuture<ResultSet> and a method that can convert a ResultSet into a ThingObj?
}
【问题讨论】:
-
您使用的是 Java 8 并发类型还是 Guava? Guava 有一个
ListenableFuture类型,JDK 没有。 -
Cassandra api 返回一个 ListenableFuture,但是我很乐意使用 Java 8 并发类型。我实际上并没有注意到 ListenableFuture 来自番石榴。我现在意识到 CompletableFuture 可能是适合使用的类。即便如此,我仍然不知道该怎么做。
-
好的 - 我将更新我的答案以包括使用
CompletableFuture的替代解决方案。
标签: java concurrency future