Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #36700
| From | v_borchert@despammed.com (Volker Borchert) |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: How to handle same sanity checks |
| Date | 2017-06-22 18:33 +0000 |
| Organization | Private site at Eddersheim, Germany |
| Message-ID | <oih2hb$bad$1@Gaia.teknon.de> (permalink) |
| References | <87o9tgo0a9.fsf@munus.decebal.nl> <oiga3s$jrd$1@dont-email.me> |
Eric Sosman wrote:
> On 6/22/2017 5:10 AM, Cecil Westerhof wrote:
> > In my code I have several methods that start with:
> > if ((n < MIN_VAL) || (n > MAX_VAL)) {
> > throw new InvalidParameterException(String.format(ERROR_N, n));
> > }
> >
> > That is not really DRY.
> >
> > I could write a method like:
> > private void checkN(n) {
> > if ((n < MIN_VAL) || (n > MAX_VAL)) {
> > throw new InvalidParameterException(String.format(ERROR_N, n));
> > }
> > }
> >
> > And then replace all the checks with a call to checkN. But then the
> > exception is generated in the method checkN instead of the method that
> > has a wrong parameter.
> > What is the best way to handle this?
>
> Tastes surely vary, but for repetitive checks I favor writing
> the private internal helper method. Yes, the caller of doItPlease()
> gets an exception originating from internalSanityCheck() instead, but
> that shouldn't bother anyone. doItPlease() will be in the stack
> trace anyhow, even though it's not at the very top.
That can be a problem with some more-or-less-broken logging frameworks,
and a nuisance if trying to diagnose over the phone.
You can always do something like
final InvalidParameterException e
= new InvalidParameterException(String.format(ERROR_N, n));
final StackTraceElement[] s = e.getStackTrace();
e.setStackTrace(Arrays.copyOfRange(s, 1, s.length));
throw e;
or even
public class Throwables {
private Throwables() {
}
public static <T extends Throwable> T relocate(final T t, final int n) {
final StackTraceElement[] s = t.getStackTrace();
if (n < s.length) {
t.setStackTrace(Arrays.copyOfRange(s, n, s.length));
}
return t;
}
}
and then
throw Throwables.relocate(new InvalidParameterException(...)), 1);
--
"I'm a doctor, not a mechanic." Dr Leonard McCoy <mccoy@ncc1701.starfleet.fed>
"I'm a mechanic, not a doctor." Volker Borchert <v_borchert@despammed.com>
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
How to handle same sanity checks Cecil Westerhof <Cecil@decebal.nl> - 2017-06-22 11:10 +0200
Re: How to handle same sanity checks Martin Gregorie <martin@address-in-sig.invalid> - 2017-06-22 10:27 +0000
Re: How to handle same sanity checks Cecil Westerhof <Cecil@decebal.nl> - 2017-06-22 13:21 +0200
Re: How to handle same sanity checks Cecil Westerhof <Cecil@decebal.nl> - 2017-06-23 06:51 +0200
Re: How to handle same sanity checks Robert Klemme <shortcutter@googlemail.com> - 2017-06-24 12:06 +0200
Re: How to handle same sanity checks Martin Gregorie <martin@address-in-sig.invalid> - 2017-06-24 10:33 +0000
Re: How to handle same sanity checks Robert Klemme <shortcutter@googlemail.com> - 2017-06-24 16:46 +0200
Re: How to handle same sanity checks Martin Gregorie <martin@address-in-sig.invalid> - 2017-06-24 19:37 +0000
Re: How to handle same sanity checks Andreas Leitgeb <avl@logic.at> - 2017-06-22 11:26 +0000
Re: How to handle same sanity checks Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-06-22 07:44 -0400
Re: How to handle same sanity checks Andreas Leitgeb <avl@logic.at> - 2017-06-22 12:30 +0000
Re: How to handle same sanity checks Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-06-22 07:40 -0400
Re: How to handle same sanity checks v_borchert@despammed.com (Volker Borchert) - 2017-06-22 18:33 +0000
Re: How to handle same sanity checks Cecil Westerhof <Cecil@decebal.nl> - 2017-06-23 06:48 +0200
Re: How to handle same sanity checks Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-06-23 09:57 -0400
Re: How to handle same sanity checks Cecil Westerhof <Cecil@decebal.nl> - 2017-06-23 16:31 +0200
Re: How to handle same sanity checks Martin Gregorie <martin@address-in-sig.invalid> - 2017-06-23 17:21 +0000
Re: How to handle same sanity checks Eric Douglas <e.d.programmer@gmail.com> - 2017-06-26 05:21 -0700
Re: How to handle same sanity checks Martin Gregorie <martin@address-in-sig.invalid> - 2017-06-26 13:34 +0000
Re: How to handle same sanity checks Martin Gregorie <martin@address-in-sig.invalid> - 2017-06-26 15:22 +0000
Re: How to handle same sanity checks Arne Vajhøj <arne@vajhoej.dk> - 2017-06-25 22:55 -0400
Re: How to handle same sanity checks Marcel Mueller <news.5.maazl@spamgourmet.org> - 2017-06-22 23:07 +0200
Re: How to handle same sanity checks Joerg Meier <joergmmeier@arcor.de> - 2017-06-25 09:52 +0200
Re: How to handle same sanity checks Robert Klemme <shortcutter@googlemail.com> - 2017-06-25 12:31 +0200
Re: How to handle same sanity checks Arne Vajhøj <arne@vajhoej.dk> - 2017-06-25 14:23 -0400
Style police (Was: Re: How to handle same sanity checks) Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-06-25 17:28 -0400
Re: Style police (Was: Re: How to handle same sanity checks) Arne Vajhøj <arne@vajhoej.dk> - 2017-06-25 19:14 -0400
Re: Style police (Was: Re: How to handle same sanity checks) Arne Vajhøj <arne@vajhoej.dk> - 2017-06-25 19:19 -0400
Re: Style police (Was: Re: How to handle same sanity checks) Robert Klemme <shortcutter@googlemail.com> - 2017-06-26 23:34 +0200
csiph-web