【发布时间】:2014-09-29 22:25:46
【问题描述】:
Callable接口中泛型有什么用?
考虑一下我从https://blogs.oracle.com/CoreJavaTechTips/entry/get_netbeans_6复制的这段代码:
import java.util.\*;
import java.util.concurrent.\*;
public class CallableExample {
public static class WordLengthCallable
implements Callable {
private String word;
public WordLengthCallable(String word) {
this.word = word;
}
public Integer call() {
return Integer.valueOf(word.length());
}
}
public static void main(String args[]) throws Exception {
ExecutorService pool = Executors.newFixedThreadPool(3);
Set<Future<Integer>> set = new HashSet<Future<Integer>>();
for (String word: args) {
Callable<Integer> callable = new WordLengthCallable(word);
Future<Integer> future = pool.submit(callable);
set.add(future);
}
int sum = 0;
for (Future<Integer> future : set) {
sum += future.get();
}
System.out.printf("The sum of lengths is %s%n", sum);
System.exit(sum);
}
}
Callable<Integer> 和 Future<Integer> 中的整数未被使用。它也可以是其他任何东西,例如 Callable<String> 和 Future<String>,并且代码仍然可以工作。
我了解泛型的用法,并特别欣赏它在集合中的用法。
谢谢。
【问题讨论】:
-
这样
get将返回Integer而不是Object,还是我错了?
标签: java multithreading generics concurrency callable