Exception Fırlatmak
2 tane yöntem var
1 - Eğer supplyAsync() metodu içinde checked exception fırlatılıyorsa bu exception'ı yakalayıp CompletionException olarak tekrar fırlatmak gerekiyor.
2. completeExceptionally() metodu çağrılır
1. CompletionException FırlatmakÖrnekŞöyle
yaparız// Some code
CompletableFuture<A> future= CompletableFuture.supplyAsync(() -> {
try {
return someObj.someFunc();
}
catch(ServerException ex) {
throw new CompletionException(ex);
}
});
Daha sonra future.get() veya future.join() çağrılarında bu checked exception'a erişme imkanı var.
2. completeExcepitonally() Çağrısı YapmakÖrnekŞöyle
yaparız.
public static CompletableFuture<Integer> converter(String convertMe) {
CompletableFuture<Integer> future = new CompletableFuture<>();
try {
future.complete(Integer.parseInt(convertMe));
} catch (Exception ex) {
future.completeExceptionally(ex);
}
return future;
}
Exception Olduğunu Anlamak ve Erişmek
1. Future.join()
2. Future.get()
3. supplyAsynch + handle()
4. supplyAsynch + exceptionally()
5. supplyAsynch + whenComplete ()
Future.join() İle Checked Exception'a Erişmek
Örnek Şöyle yaparız. Burada belki de en güzeli sadece Exception'ı yakalamak ta olabilir. Böylece Supplier unchecked exception fırlatsa bile yakalanabilir.CompletableFuture<A> future = ...;
A resultOfA;
try {
resultOfA = future.join();
}
catch(CompletionException ex) {
...
}
Future.get() İle Checked Exception'a Erişmek
ÖrnekŞöyle yaparız. Burada belki de en güzeli sadece Exception'ı yakalamak ta olabilir. Böylece Supplier unchecked exception fırlatsa bile yakalanabilir.CompletableFuture<A> future = ...;
A resultOfA;
try {
resultOfA = future.get();
}
catch(Exception ex) {
...
}
supplyAsynch metodu ve exceptionally
Burada future sonucunda exception görmek yerine exception'ı temsil eden bir sonuç döndürülür.
3 tane yöntem var.
- handle() metodu
- exceptionally() metodu
- whenComplete metodu()
handle metoduŞöyle
yaparızCompletableFuture correctHandler = CompletableFuture.supplyAsync(() -> "A")
.thenApply(Integer::parseInt)
.handle((result, ex) -> {
if (null != ex) {
ex.printStackTrace();
return 0;
} else {
System.out.println("HANDLING " + result);
return result;
}
})
.thenAcceptAsync(s -> {
System.out.println("CORRECT: " + s);
});
exceptionally metoduÖrnekŞöyle
yaparız.
CompletableFuture parser = CompletableFuture.supplyAsync(() -> "1")
.thenApply(Integer::parseInt)
.exceptionally(t -> {
t.printStackTrace();
return 0;
})
.thenAcceptAsync(s -> System.out.println("CORRECT value: " + s));
whenComplete metoduÖrnekŞöyle
yaparız.
CompletableFuture correctHandler2 = CompletableFuture.supplyAsync(() -> "A")
.thenApply(Integer::parseInt)
.whenComplete((result, ex) -> {
if (null != ex) {
ex.printStackTrace();
}
})
.thenAcceptAsync(s -> {
System.out.println("When Complete: " + s);
});