|
|
|
|
|
by barrkel
2376 days ago
|
|
interface ThrowingConsumer<T, E extends Exception> {
void accept(T value) throws E;
}
// ...
<E extends Exception> void withThing(ThrowingConsumer<Thing,E> callback) throws E { ... }
The problems are that (a) you need to add an extra type parameter for exceptions all over the place, (b) exception unification (sum type) doesn't work generically - you can say E1 | E2 in a catch block but it's not a real type, and (c) it composes poorly with existing libraries that expect Consumer<T> throughout.For one level deep callbacks (for resource handling and the like) it works reasonably well though. |
|