我的Callable
会返回Map
,因此当我将其分配给Future
并打印出其内容时,会显示{necessities=300, investment=100, savings=200}
。
但我如何实际阅读上述值?我试图重新分配我从未来to Map<String,String>
获得的值,但是我得到了一个不兼容的类型错误。
我的地图是Map<String, String>
。这是返回数据的Callable
(在kucing.java
中):
public Callable<Map<String, String>> getData() {
return new Callable() {
public Map<String, String> call() {
return getDataFromDatabase();
}
};
}
以下是我将数据检索到Future
Future myResult = es.submit(kucing.getData());
Observable<Future> myObservable = Observable.just(myResult);
Subscriber<Future> mySubscriber = new Subscriber<Future>() {
@Override
public void onNext(Future future) {
Log.v(FILE_NAME,"future: " + future.toString());
try{
Log.v(FILE_NAME,"future: " + future.get().toString());
Map<String, String> map = future.get();
}catch (Exception e){
Log.e(FILE_NAME,"future e: " + e.toString());
}
}
};
答案 0 :(得分:1)
Future myResult = es.submit(kucing.getData());
此Future具有原始类型:您实际上并不知道其返回值的类型(尽管您知道它将是一个Object)。
Map<String, String> map = myResult.get(); // Compiler error.
Object obj = myResult.get(); // OK.
您需要提供完整类型:
Future<Map<String, String>> myResult = es.submit(kucing.getData());
Map<String, String> map = myResult.get(); // OK.
如果您想在此观察员/订阅者模式中使用未来,则需要将所有Future
替换为Future<Map<String, String>>
。