Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #36702

Re: How to handle same sanity checks

From Cecil Westerhof <Cecil@decebal.nl>
Newsgroups comp.lang.java.programmer
Subject Re: How to handle same sanity checks
Date 2017-06-23 06:48 +0200
Organization Decebal Computing
Message-ID <87fuernwav.fsf@munus.decebal.nl> (permalink)
References <87o9tgo0a9.fsf@munus.decebal.nl> <oiga3s$jrd$1@dont-email.me> <oih2hb$bad$1@Gaia.teknon.de>

Show all headers | View raw


On Thursday 22 Jun 2017 20:33 CEST, Volker Borchert wrote:

> 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;

That is a very good idea. I have now:
    private static void checkInRange(final int n,
                                     final int lowLimit,
                                     final int highLimit,
                                     final String message) {
        if ((n < lowLimit) || (n > highLimit)) {
            final InvalidParameterException e =
                new InvalidParameterException(
                    String.format(message, lowLimit, highLimit, n));
            final StackTraceElement[] s = e.getStackTrace();
            e.setStackTrace(Arrays.copyOfRange(s, 1, s.length));
            throw e;
        }
    }

Works like a charm.


I use the function also in another check function. This I solved in
the following way:
    private static void checkInRangeStartEnd(final int start,
                                             final int end,
                                             final int lowLimit,
                                             final int highLimit,
                                             final String messageStart,
                                             final String messageEnd) {
        try {
            checkInRange(start, lowLimit, highLimit, messageStart);
            checkInRange(end,   start,    highLimit, messageEnd);
        } catch (final InvalidParameterException e) {
            final StackTraceElement[] s = e.getStackTrace();
            e.setStackTrace(Arrays.copyOfRange(s, 1, s.length));
            throw e;
        }
    }

The code is now more clear and easier to change, while the stack trace
gives the right information.

Thanks.


Probably I should define a function to modify the stack trace.

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


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