digitalmars.D - Java to D - exception
- webdev (41/41) Sep 23 2020 Trans some Java code to D, so far has lots of issues, this time I
- Steven Schveighoffer (13/61) Sep 23 2020 No null pointer exceptions in D (you can get them on Linux, but by
- Dominikus Dittes Scherkl (2/3) Sep 24 2020 Please, use the learn forum for stuff like this.
Trans some Java code to D, so far has lots of issues, this time I will focus on Exception. interface Widget { string name(); } Widget createWidget() { return null; } void test() { createWidget().name(); } The similar code in Java will throw NullPointerException, but in D it will throw object.Error, how do I know it was caused by null? And is it possible to override callback like onOutOfMemoryError & onRangeError? In Java you can catch multi exception like try { ... } catch (A | B e) { ... } can trans to: try { ... } catch (A e) { ... } catch (B e) { ... } or: try { ... } catch (Throwable t) { if (t is A | B) { ... } else { throw t; } } which one is better, will it has side effect?
Sep 23 2020
On 9/23/20 12:53 PM, webdev wrote:Trans some Java code to D, so far has lots of issues, this time I will focus on Exception. interface Widget { string name(); } Widget createWidget() { return null; } void test() { createWidget().name(); } The similar code in Java will throw NullPointerException, but in D it will throw object.Error, how do I know it was caused by null?No null pointer exceptions in D (you can get them on Linux, but by enabling a non-portable feature of the runtime). D relies on segfault to halt your program. In debug mode, on some platforms, it might throw an Error (I think on Windows only). Null pointer dereferences are considered a programming error and not recoverable. Do not try to catch an Error.And is it possible to override callback like onOutOfMemoryError & onRangeError?I believe if you define these functions extern(C) in your app they will be used.In Java you can catch multi exception like try { ... } catch (A | B e) { ... } can trans to: try { ... } catch (A e) { ... } catch (B e) { ... } or: try { ... } catch (Throwable t) { if (t is A | B) { ... } else { throw t; } } which one is better, will it has side effect?1. Don't catch Throwable, as Errors should not be caught. Catch Exception instead 2. Your code should work as expected I think. You can rethrow exceptions. -Steve
Sep 23 2020
On Wednesday, 23 September 2020 at 16:53:05 UTC, webdev wrote:Trans some Java code to D, so far has lots of issues,Please, use the learn forum for stuff like this.
Sep 24 2020