commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: StringUtils.isEmpty() family of methods on Objects
Date Mon, 30 Jan 2017 04:36:58 GMT
You can't blame the debugger too much when all the metadata you have for
code location is a file name and line number... ;-)

Gary

On Sun, Jan 29, 2017 at 6:49 PM, Matt Sicker <boards@gmail.com> wrote:

> I blame the state of debuggers more so than lambdas. I've yet to see a Java
> debugger that can properly handle any sort of fluent DSL, and lambdas make
> fluent DSLs far more common now.
>
> On 29 January 2017 at 20:45, Rob Tompkins <chtompki@gmail.com> wrote:
>
> >
> >
> > > On Jan 29, 2017, at 9:24 PM, Gary Gregory <garydgregory@gmail.com>
> > wrote:
> > >
> > > I know someone would reply with some Java 8 lamba... but that will
> never
> > be
> > > as easy to ready as a method name like isEmpty or hasSomething...
> > >
> >
> > At my day job a bunch of folks got giddy over the new java 8
> functionality
> > and ended up writing a ton of unreadable non-debugable code. So, I
> > definitely agree with this sentiment.
> >
> > -Rob
> >
> >
> > > Gary
> > >
> > >> On Sat, Jan 28, 2017 at 2:33 PM, Matt Benson <gudnabrsam@gmail.com>
> > wrote:
> > >>
> > >> Like Bene, this feels a little off to me. Just for argument's sake,
> > let's
> > >> look at:
> > >>
> > >> Optional.ofNullable(foo).map(Object::toString).filter(
> > >> StringUtils::isNotBlank).isPresent();
> > >>
> > >> Assuming you're on Java 8, of course. It's a bit long, but not
> horrible.
> > >> What about, in a Java 8-compatible version of [lang], an
> > >> Optionals/OptionalUtils class?
> > >>
> > >> public class OptionalUtils {
> > >>
> > >>  public static Optional<String> toString(Object o) {
> > >>    return map(o, Object::toString);
> > >>  }
> > >>
> > >>  static <T, R> Optional<R> map(T t, Function<? super T,
? extends R>
> > fn) {
> > >>    return Optional.ofNullable(t).map(fn);
> > >>  }
> > >> }
> > >>
> > >> Then your test could be shortened to:
> > >>
> > >> OptionalUtils.toString(foo).filter(StringUtils::
> > isNotBlank).isPresent();
> > >>
> > >> Just thinking "out loud",
> > >> Matt
> > >>
> > >> On Sat, Jan 28, 2017 at 11:08 AM, Gary Gregory <
> garydgregory@gmail.com>
> > >> wrote:
> > >>
> > >>> If you look at the link Matt provided, that handles arrays and
> > >> collection,
> > >>> but not Object.toString()
> > >>>
> > >>> Gary
> > >>>
> > >>> On Jan 28, 2017 1:13 AM, "Benedikt Ritter" <britter@apache.org>
> wrote:
> > >>>
> > >>>
> > >>>> Am 28.01.2017 um 02:53 schrieb Gary Gregory <garydgregory@gmail.com
> >:
> > >>>>
> > >>>> The simplest examples I have on hand are instances of Path and
URI
> > >> which
> > >>>> can be built with an empty string. I want to know if these are
> > "empty".
> > >>> For
> > >>>> the app I am now on for example, a Path or null and "" should be
> > >> treated
> > >>>> the same. Same for a URI.
> > >>>
> > >>> I don’t think it is a good idea to define emptiness based on the
> return
> > >>> value of Object.toString(). Consider the following:
> > >>>
> > >>> isEmpty(null) -> true
> > >>> isEmpty(„“) -> true
> > >>> isEmpty(new URI(„“)) -> true
> > >>>
> > >>> But:
> > >>>
> > >>> isEmpty(Collections.emptyList()) -> false
> > >>> isEmpty(new int[0]) -> false
> > >>>
> > >>> This is because toString() has nothing to do with emptiness. For this
> > >>> reason I think it would be better to have explicitly typed method
> > >> overloads
> > >>> for the use cases you’re thinking about:
> > >>>
> > >>> boolean isEmpty(Path)
> > >>> boolean isEmpty(URI)
> > >>>
> > >>> I’m not sure whether this belong to [lang]. The first looks like
it
> > >> belongs
> > >>> to [io] while the second would better fit into [net]…
> > >>>
> > >>> Benedikt
> > >>>
> > >>>>
> > >>>> Gary
> > >>>>
> > >>>>> On Fri, Jan 27, 2017 at 5:37 PM, Matt Sicker <boards@gmail.com>
> > wrote:
> > >>>>>
> > >>>>> That's an interesting use case, though I've never come across
a
> > >>> toString()
> > >>>>> implementation that would be affected. Can you go into more
detail?
> > >>>>>
> > >>>>> On 27 January 2017 at 16:04, Gary Gregory <garydgregory@gmail.com>
> > >>> wrote:
> > >>>>>
> > >>>>>> _Like_ that except that our Log4j version does not do the
case I
> > >> want:
> > >>>>>> object.toString().
> > >>>>>>
> > >>>>>> Gary
> > >>>>>>
> > >>>>>> On Fri, Jan 27, 2017 at 1:58 PM, Matt Sicker <boards@gmail.com>
> > >> wrote:
> > >>>>>>
> > >>>>>>> Something like this?
> > >>>>>>>
> > >>>>>>> https://github.com/apache/logging-log4j2/blob/master/
> > >>>>>>> log4j-core/src/main/java/org/apache/logging/log4j/core/
> > >>>>>>> util/Assert.java#L43
> > >>>>>>>
> > >>>>>>> On 27 January 2017 at 15:54, Gary Gregory <
> garydgregory@gmail.com>
> > >>>>>> wrote:
> > >>>>>>>
> > >>>>>>>> Hi All,
> > >>>>>>>>
> > >>>>>>>> There are certain kinds of objects, _descriptor_
kind of objects
> > >> that
> > >>>>>>> would
> > >>>>>>>> benefit from isEmpty semantics. These kind of objects
can
> describe
> > >>>>>>> complex
> > >>>>>>>> command line arguments and other kind of configuration
objects.
> > >>>>>>>>
> > >>>>>>>> I'd like to add with this pseudo code:
> > >>>>>>>>
> > >>>>>>>> boolean isEmpty(Object) {
> > >>>>>>>> return object == null ? true : isEmpty(object.toString());
> > >>>>>>>> }
> > >>>>>>>>
> > >>>>>>>> Thoughts?
> > >>>>>>>>
> > >>>>>>>> Same idea of isBlank(), isNotEmpty() and so on.
> > >>>>>>>>
> > >>>>>>>> Gary
> > >>>>>>>>
> > >>>>>>>> --
> > >>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > >>>>>>>> Java Persistence with Hibernate, Second Edition
> > >>>>>>>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_
> > >>>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&
> > >>>>>>>> linkCode=as2&tag=garygregory-20&linkId=
> > >>>>> cadb800f39946ec62ea2b1af9fe6a2
> > >>>>>> b8>
> > >>>>>>>>
> > >>>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
> > >>>>> garygregory-20&l=am2&o=1&a=
> > >>>>>>>> 1617290459>
> > >>>>>>>> JUnit in Action, Second Edition
> > >>>>>>>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_
> > >>>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&
> > >>>>>>>> linkCode=as2&tag=garygregory-20&linkId=
> > >>>>> 31ecd1f6b6d1eaf8886ac902a24de4
> > >>>>>>> 18%22
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
> > >>>>> garygregory-20&l=am2&o=1&a=
> > >>>>>>>> 1935182021>
> > >>>>>>>> Spring Batch in Action
> > >>>>>>>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_
> > >>>>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&
> > >>>>>>>> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%
> > >>>>>>>> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
> > >>>>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
> > >>>>> garygregory-20&l=am2&o=1&a=
> > >>>>>>>> 1935182951>
> > >>>>>>>> Blog: http://garygregory.wordpress.com
> > >>>>>>>> Home: http://garygregory.com/
> > >>>>>>>> Tweet! http://twitter.com/GaryGregory
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> --
> > >>>>>>> Matt Sicker <boards@gmail.com>
> > >>>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>> --
> > >>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > >>>>>> Java Persistence with Hibernate, Second Edition
> > >>>>>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_
> > >>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&
> > >>>>>> linkCode=as2&tag=garygregory-20&linkId=
> > >> cadb800f39946ec62ea2b1af9fe6a2
> > >>> b8>
> > >>>>>>
> > >>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
> > >> garygregory-20&l=am2&o=1&a=
> > >>>>>> 1617290459>
> > >>>>>> JUnit in Action, Second Edition
> > >>>>>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_
> > >>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&
> > >>>>>> linkCode=as2&tag=garygregory-20&linkId=
> > >> 31ecd1f6b6d1eaf8886ac902a24de4
> > >>>>> 18%22
> > >>>>>>>
> > >>>>>>
> > >>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
> > >> garygregory-20&l=am2&o=1&a=
> > >>>>>> 1935182021>
> > >>>>>> Spring Batch in Action
> > >>>>>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_
> > >>>>>> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&
> > >>>>>> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%
> > >>>>>> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
> > >>>>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=
> > >> garygregory-20&l=am2&o=1&a=
> > >>>>>> 1935182951>
> > >>>>>> Blog: http://garygregory.wordpress.com
> > >>>>>> Home: http://garygregory.com/
> > >>>>>> Tweet! http://twitter.com/GaryGregory
> > >>>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>> --
> > >>>>> Matt Sicker <boards@gmail.com>
> > >>>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>> --
> > >>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > >>>> Java Persistence with Hibernate, Second Edition
> > >>>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?
> > >>> ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&link
> > >>> Code=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
> > >>>>
> > >>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=
> > >>> am2&o=1&a=1617290459>
> > >>>> JUnit in Action, Second Edition
> > >>>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?
> > >>> ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&link
> > >>> Code=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4
> > 18%22>
> > >>>>
> > >>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=
> > >>> am2&o=1&a=1935182021>
> > >>>> Spring Batch in Action
> > >>>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?
> > >>> ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&link
> > >>> Code=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Bli
> > >>> nk_id%7D%7D%22%3ESpring+Batch+in+Action>
> > >>>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=
> > >>> am2&o=1&a=1935182951>
> > >>>> Blog: http://garygregory.wordpress.com
> > >>>> Home: http://garygregory.com/
> > >>>> Tweet! http://twitter.com/GaryGregory
> > >>>
> > >>>
> > >>> ------------------------------------------------------------
> ---------
> > >>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > >>> For additional commands, e-mail: dev-help@commons.apache.org
> > >>>
> > >>
> > >
> > >
> > >
> > > --
> > > E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > > Java Persistence with Hibernate, Second Edition
> > > <https://www.amazon.com/gp/product/1617290459/ref=as_li_
> > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&
> > linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
> > >
> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=
> > 1617290459>
> > > JUnit in Action, Second Edition
> > > <https://www.amazon.com/gp/product/1935182021/ref=as_li_
> > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&
> > linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4
> 18%22
> > >
> > >
> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=
> > 1935182021>
> > > Spring Batch in Action
> > > <https://www.amazon.com/gp/product/1935182951/ref=as_li_
> > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&
> > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%
> > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=
> > 1935182951>
> > > Blog: http://garygregory.wordpress.com
> > > Home: http://garygregory.com/
> > > Tweet! http://twitter.com/GaryGregory
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> >
>
>
> --
> Matt Sicker <boards@gmail.com>
>



-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message