2016-08-08 6 views
2

Я получаю другой вывод из того же фрагмента кода под другой младшей версией java. Я не смог найти соответствующий билет на открытом трекере ошибок jdk.Различные сообщения для CompletionException в разных младших версиях Java 8

CompletableFuture<String> completableFuture = new CompletableFuture<>(); 
completableFuture.complete("xxx"); 

completableFuture.thenCompose(str -> { 
    CompletableFuture<String> completableFuture1 = new CompletableFuture<>(); 
    completableFuture1.completeExceptionally(new Exception("hello")); 
    return completableFuture1; 
}).exceptionally(ex -> { 
    System.out.println(ex.getMessage()); 
    return null; 
}).get(); 

Выход под JDK 1.8.0_25:

привет

Выход под JDK 1.8.0_102:

java.lang.Exception: Привет

Является ли новое исправление или регрессия? Что такое связанный билет?

+0

Не является ли сообщение об исключении только для людей? Все необходимые дополнительные значения должны содержаться в самом Исключении. – Robert

ответ

5

Существует сообщение об ошибке here, обсуждающее это изменение. Ключ в Javadoc из CompletableFuture#thenCompose

Возвращает нового CompletionStage, что, когда этот этап завершается обычно, выполняются с этой стадией в качестве аргумента к поставляемым функции. См. Документацию CompletionStage для правил, охватывающих исключительное завершение.

и и класс документации CompletionStage

Во всех остальных случаях, если вычисление стадии в резко заканчивается с в (непроверенные) исключение или ошибку, то все зависимые этапы требуют его завершения полного исключения а также с CompletionException с исключением в качестве причины.

Вот что вы здесь видите. Function вы проходите до exceptionally, теперь получает CompletionException с Exception, который завершил запуск CompletableFuture.

Поведение, которое вы видите сейчас, является ожидаемым поведением.

Вам придется разворачивать, чтобы получить причину исключительного завершения

Throwable cause = ex.getCause(); // this is your Exception("Hello") 
0

Это вопрос и был уже зафиксирован в 9 и портированном к 8u60. Вы увидите java.lang.Exception: привет от 8u60 и далее.

 Смежные вопросы

  • Нет связанных вопросов^_^