我有两个可调用对象。一个返回一个Integer,另一个返回一个String。我正在使用ExecutorService来运行它们。
公共类MyExecutor {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService service = Executors.newSingleThreadExecutor();
Callable call1 = new Callable() {
public Integer call() {
final int a = 20;
return a;
}
};
Callable call2 = new Callable() {
public String call() {
return "This is a String";
}
};
Future<Integer> result = service.submit(call2);
System.out.println(result.get());
Future<String> result2 = service.submit(call1);
System.out.println(result2.get());
service.shutdown();
}
}
据我所知,不能将String强制转换为整数,反之亦然,但是,当我运行上述代码时,尽管结果是Future,但result.get()会完美地打印字符串。这怎么可能?它不应该在运行时提供类强制执行吗?
此外,按预期方式打印出result2.get()的值会产生类强制转换异常,因为您不能将Integer强制转换为String。
以下是上面代码的输出:
这是一个字符串
线程“ main”中的异常java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.lang.String 在com.practice.concurrency.MyExecutor.main(MyExecutor.java:51)