Future <Integer>对象接受String的返回类型。怎么样?

时间:2019-09-09 11:16:24

标签: java future executorservice

我有两个可调用对象。一个返回一个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)

0 个答案:

没有答案