|
|
|
|
|
by vips7L
24 days ago
|
|
Java just makes them hard to use. They're not fully apart of the type system and they're hard to escape when you actually want to panic. Everyone around here praises Rust's result, checked exceptions are the same idea: fn someFn() -> Result<T, E>
T someFn() throws E
fun someFn(): T | E // Kotlin's proposed error unions
Checked exceptions actually compose a little better when you have a function that can throw multiple types: T someFn() throws E, F, G
This is like a union type of E | F | G. I don't know about Rust, but most languages won't let you do that over generic types like Result<T, E | F | G>.The main problem for Java's checked exceptions is just how boilerplatey they are, especially when you can't handle something. In Java if you need to become "unchecked" or panic you need to: try {
someFn();
} catch (SomeException ex) {
throw new RuntimeException(ex); // dunno panic
}
Ideally that would just be: someFn()!!!!; // shut up compile panic if this happens
|
|
It also provides an error interface so sometimes you don’t need the enum, if all the types return that interface.