Is there a better way to do an empty check in Java? [duplicate] Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!How to check multiple objects for nullity?Check chains of “get” calls for nullHow better refactor chain of methods that can return null in java?Check if last getter in method chain is not nullTry-Catch Instead of Null Check When Using Several Getterstry/catch vs null check in javaTry Catch Performance JavaIs Java “pass-by-reference” or “pass-by-value”?How do I efficiently iterate over each entry in a Java Map?What is the difference between public, protected, package-private and private in Java?Fastest way to determine if an integer's square root is an integerHow do I read / convert an InputStream into a String in Java?When to use LinkedList over ArrayList in Java?How do I generate random integers within a specific range in Java?What's the simplest way to print a Java array?How do I convert a String to an int in Java?Creating a memory leak with Java

How does a spellshard spellbook work?

Is it possible to force a specific program to remain in memory after closing it?

Did Mueller's report provide an evidentiary basis for the claim of Russian govt election interference via social media?

How did Fremen produce and carry enough thumpers to use Sandworms as de facto Ubers?

Why are vacuum tubes still used in amateur radios?

What is an "asse" in Elizabethan English?

The Nth Gryphon Number

Why do early math courses focus on the cross sections of a cone and not on other 3D objects?

Movie where a circus ringmaster turns people into animals

Did any compiler fully use 80-bit floating point?

Interpretation of R output from Cohen's Kappa

How do I tell what width chain my used chainring needs?

Do I really need to have a message in a novel to appeal to readers?

How to draw/optimize this graph with tikz

Google .dev domain strangely redirects to https

Do wooden building fires get hotter than 600°C?

How would a mousetrap for use in space work?

Has negative voting ever been officially implemented in elections, or seriously proposed, or even studied?

What do you call the main part of a joke?

What to do with repeated rejections for phd position

Is there public access to the Meteor Crater in Arizona?

How many time has Arya actually used Needle?

What initially awakened the Balrog?

Why does it sometimes sound good to play a grace note as a lead in to a note in a melody?



Is there a better way to do an empty check in Java? [duplicate]



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!How to check multiple objects for nullity?Check chains of “get” calls for nullHow better refactor chain of methods that can return null in java?Check if last getter in method chain is not nullTry-Catch Instead of Null Check When Using Several Getterstry/catch vs null check in javaTry Catch Performance JavaIs Java “pass-by-reference” or “pass-by-value”?How do I efficiently iterate over each entry in a Java Map?What is the difference between public, protected, package-private and private in Java?Fastest way to determine if an integer's square root is an integerHow do I read / convert an InputStream into a String in Java?When to use LinkedList over ArrayList in Java?How do I generate random integers within a specific range in Java?What's the simplest way to print a Java array?How do I convert a String to an int in Java?Creating a memory leak with Java



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








21
















This question already has an answer here:



  • Check chains of “get” calls for null

    8 answers



  • Check if last getter in method chain is not null

    3 answers



  • How to check multiple objects for nullity?

    5 answers



  • Try-Catch Instead of Null Check When Using Several Getters

    3 answers



  • How better refactor chain of methods that can return null in java?

    10 answers



This might look like a primitive question or a this could be done by a simple utility library method that I don't know about.



The goal is to check the value of a boolean field that is nested under two objects.



private boolean sourceWebsite(Registration registration) 
Application application = registration.getApplication();
if (application == null)
return true;


Metadata metadata = application.getMetadata();
if (metadata == null)
return true;


Boolean source = metadata.getSource();
if (source == null)
return true;


return !source;



I know this could be done in a single if(). I have added multiple ifs here for the sake of readability.



Is there a way that we could simplify the above if statements and have a simple utility class that returns the value of Boolean source if the parent objects or not null?










share|improve this question















marked as duplicate by Sotirios Delimanolis java
Users with the  java badge can single-handedly close java questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Apr 11 at 16:09


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
























    21
















    This question already has an answer here:



    • Check chains of “get” calls for null

      8 answers



    • Check if last getter in method chain is not null

      3 answers



    • How to check multiple objects for nullity?

      5 answers



    • Try-Catch Instead of Null Check When Using Several Getters

      3 answers



    • How better refactor chain of methods that can return null in java?

      10 answers



    This might look like a primitive question or a this could be done by a simple utility library method that I don't know about.



    The goal is to check the value of a boolean field that is nested under two objects.



    private boolean sourceWebsite(Registration registration) 
    Application application = registration.getApplication();
    if (application == null)
    return true;


    Metadata metadata = application.getMetadata();
    if (metadata == null)
    return true;


    Boolean source = metadata.getSource();
    if (source == null)
    return true;


    return !source;



    I know this could be done in a single if(). I have added multiple ifs here for the sake of readability.



    Is there a way that we could simplify the above if statements and have a simple utility class that returns the value of Boolean source if the parent objects or not null?










    share|improve this question















    marked as duplicate by Sotirios Delimanolis java
    Users with the  java badge can single-handedly close java questions as duplicates and reopen them as needed.

    StackExchange.ready(function()
    if (StackExchange.options.isMobile) return;

    $('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
    var $hover = $(this).addClass('hover-bound'),
    $msg = $hover.siblings('.dupe-hammer-message');

    $hover.hover(
    function()
    $hover.showInfoMessage('',
    messageElement: $msg.clone().show(),
    transient: false,
    position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
    dismissable: false,
    relativeToBody: true
    );
    ,
    function()
    StackExchange.helpers.removeMessages();

    );
    );
    );
    Apr 11 at 16:09


    This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.




















      21












      21








      21


      2







      This question already has an answer here:



      • Check chains of “get” calls for null

        8 answers



      • Check if last getter in method chain is not null

        3 answers



      • How to check multiple objects for nullity?

        5 answers



      • Try-Catch Instead of Null Check When Using Several Getters

        3 answers



      • How better refactor chain of methods that can return null in java?

        10 answers



      This might look like a primitive question or a this could be done by a simple utility library method that I don't know about.



      The goal is to check the value of a boolean field that is nested under two objects.



      private boolean sourceWebsite(Registration registration) 
      Application application = registration.getApplication();
      if (application == null)
      return true;


      Metadata metadata = application.getMetadata();
      if (metadata == null)
      return true;


      Boolean source = metadata.getSource();
      if (source == null)
      return true;


      return !source;



      I know this could be done in a single if(). I have added multiple ifs here for the sake of readability.



      Is there a way that we could simplify the above if statements and have a simple utility class that returns the value of Boolean source if the parent objects or not null?










      share|improve this question

















      This question already has an answer here:



      • Check chains of “get” calls for null

        8 answers



      • Check if last getter in method chain is not null

        3 answers



      • How to check multiple objects for nullity?

        5 answers



      • Try-Catch Instead of Null Check When Using Several Getters

        3 answers



      • How better refactor chain of methods that can return null in java?

        10 answers



      This might look like a primitive question or a this could be done by a simple utility library method that I don't know about.



      The goal is to check the value of a boolean field that is nested under two objects.



      private boolean sourceWebsite(Registration registration) 
      Application application = registration.getApplication();
      if (application == null)
      return true;


      Metadata metadata = application.getMetadata();
      if (metadata == null)
      return true;


      Boolean source = metadata.getSource();
      if (source == null)
      return true;


      return !source;



      I know this could be done in a single if(). I have added multiple ifs here for the sake of readability.



      Is there a way that we could simplify the above if statements and have a simple utility class that returns the value of Boolean source if the parent objects or not null?





      This question already has an answer here:



      • Check chains of “get” calls for null

        8 answers



      • Check if last getter in method chain is not null

        3 answers



      • How to check multiple objects for nullity?

        5 answers



      • Try-Catch Instead of Null Check When Using Several Getters

        3 answers



      • How better refactor chain of methods that can return null in java?

        10 answers







      java if-statement conditional






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 11 at 12:13









      Peter Mortensen

      14k1987114




      14k1987114










      asked Apr 11 at 10:42









      codeMancodeMan

      4,46121646




      4,46121646




      marked as duplicate by Sotirios Delimanolis java
      Users with the  java badge can single-handedly close java questions as duplicates and reopen them as needed.

      StackExchange.ready(function()
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function()
      $hover.showInfoMessage('',
      messageElement: $msg.clone().show(),
      transient: false,
      position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
      dismissable: false,
      relativeToBody: true
      );
      ,
      function()
      StackExchange.helpers.removeMessages();

      );
      );
      );
      Apr 11 at 16:09


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









      marked as duplicate by Sotirios Delimanolis java
      Users with the  java badge can single-handedly close java questions as duplicates and reopen them as needed.

      StackExchange.ready(function()
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function()
      $hover.showInfoMessage('',
      messageElement: $msg.clone().show(),
      transient: false,
      position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
      dismissable: false,
      relativeToBody: true
      );
      ,
      function()
      StackExchange.helpers.removeMessages();

      );
      );
      );
      Apr 11 at 16:09


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
























          4 Answers
          4






          active

          oldest

          votes


















          36














          You can use java.util.Optional in this way:



          private boolean sourceWebsite(Registration registration) 
          return Optional.of(registration)
          .map(Registration::getApplication)
          .map(Application::getMetadata)
          .map(Metadata::getSource)
          .map(source -> !source)
          .orElse(Boolean.TRUE);



          In short, this will return true if any of the getters returns null, and !Metadata.source otherwise.






          share|improve this answer




















          • 9





            Boolean.FALSE::equals instead of source -> !source if you really love method reference

            – Adrian
            Apr 11 at 11:15






          • 2





            I think you meant ` Optional.ofNullable()`

            – dehasi
            Apr 11 at 12:15






          • 1





            Sorry, you are right. I've upvoted :)

            – dehasi
            Apr 11 at 12:17






          • 1





            Return type is boolean so .orElse(true); would be better.

            – user11153
            Apr 11 at 12:54






          • 2





            @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

            – ave4496
            Apr 11 at 14:07


















          15














          The following will return true if any one of is null. If all values are not null, it returns !source.



          private boolean sourceWebsite(Registration registration) 


          Updated :



          If you want that every getter not called more than once then you can declare variable for every object like



          private boolean sourceWebsite(Registration registration) !source;







          share|improve this answer




















          • 5





            The null-conditional operator (?.) of c# is for shure a nice thing...

            – keuleJ
            Apr 11 at 10:52






          • 3





            One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

            – Philipp
            Apr 11 at 11:45












          • @Philipp yes. But in general getters are trivial.

            – Khalid Shah
            Apr 11 at 11:47






          • 5





            In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

            – Philipp
            Apr 11 at 11:49






          • 1





            @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

            – Philipp
            Apr 11 at 15:25


















          2














          Another option you can use is a try-catch block. If you get a null pointer exception return true.



          private boolean sourceWebsite(Registration registration) 
          try
          return !registration.getApplication().getMetadata().getSource();

          catch (NullPointerException e)
          return true;







          share|improve this answer




















          • 6





            You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

            – Nzall
            Apr 11 at 13:46






          • 1





            In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

            – CaptianObvious
            Apr 11 at 13:53






          • 1





            @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

            – Old Nick
            Apr 11 at 15:00











          • Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

            – Zoe
            Apr 11 at 15:08











          • Until a NPE is thrown much deeper in one of those methods.

            – Koekje
            Apr 11 at 15:56


















          -2














          You could do it using a hacky method like this:



          public static Object get(Object o, String... m) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException m.length == 0) 
          return null;

          for (String m1 : m)
          o = o.getClass().getMethod(m1).invoke(o);
          if (o == null)
          return null;


          return o;



          And call it like this:



          Boolean source = (Boolean) get(registration, "getApplication", "getMetadata", "getSource");
          return source == null ? false : !source;


          But I wouldn't do it this way in any serious projects.






          share|improve this answer




















          • 2





            This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

            – julodnik
            Apr 11 at 14:56












          • It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

            – Eric Duminil
            Apr 11 at 16:38

















          4 Answers
          4






          active

          oldest

          votes








          4 Answers
          4






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          36














          You can use java.util.Optional in this way:



          private boolean sourceWebsite(Registration registration) 
          return Optional.of(registration)
          .map(Registration::getApplication)
          .map(Application::getMetadata)
          .map(Metadata::getSource)
          .map(source -> !source)
          .orElse(Boolean.TRUE);



          In short, this will return true if any of the getters returns null, and !Metadata.source otherwise.






          share|improve this answer




















          • 9





            Boolean.FALSE::equals instead of source -> !source if you really love method reference

            – Adrian
            Apr 11 at 11:15






          • 2





            I think you meant ` Optional.ofNullable()`

            – dehasi
            Apr 11 at 12:15






          • 1





            Sorry, you are right. I've upvoted :)

            – dehasi
            Apr 11 at 12:17






          • 1





            Return type is boolean so .orElse(true); would be better.

            – user11153
            Apr 11 at 12:54






          • 2





            @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

            – ave4496
            Apr 11 at 14:07















          36














          You can use java.util.Optional in this way:



          private boolean sourceWebsite(Registration registration) 
          return Optional.of(registration)
          .map(Registration::getApplication)
          .map(Application::getMetadata)
          .map(Metadata::getSource)
          .map(source -> !source)
          .orElse(Boolean.TRUE);



          In short, this will return true if any of the getters returns null, and !Metadata.source otherwise.






          share|improve this answer




















          • 9





            Boolean.FALSE::equals instead of source -> !source if you really love method reference

            – Adrian
            Apr 11 at 11:15






          • 2





            I think you meant ` Optional.ofNullable()`

            – dehasi
            Apr 11 at 12:15






          • 1





            Sorry, you are right. I've upvoted :)

            – dehasi
            Apr 11 at 12:17






          • 1





            Return type is boolean so .orElse(true); would be better.

            – user11153
            Apr 11 at 12:54






          • 2





            @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

            – ave4496
            Apr 11 at 14:07













          36












          36








          36







          You can use java.util.Optional in this way:



          private boolean sourceWebsite(Registration registration) 
          return Optional.of(registration)
          .map(Registration::getApplication)
          .map(Application::getMetadata)
          .map(Metadata::getSource)
          .map(source -> !source)
          .orElse(Boolean.TRUE);



          In short, this will return true if any of the getters returns null, and !Metadata.source otherwise.






          share|improve this answer















          You can use java.util.Optional in this way:



          private boolean sourceWebsite(Registration registration) 
          return Optional.of(registration)
          .map(Registration::getApplication)
          .map(Application::getMetadata)
          .map(Metadata::getSource)
          .map(source -> !source)
          .orElse(Boolean.TRUE);



          In short, this will return true if any of the getters returns null, and !Metadata.source otherwise.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 11 at 16:00









          Captain Man

          3,29932855




          3,29932855










          answered Apr 11 at 10:49









          ernest_kernest_k

          25k43151




          25k43151







          • 9





            Boolean.FALSE::equals instead of source -> !source if you really love method reference

            – Adrian
            Apr 11 at 11:15






          • 2





            I think you meant ` Optional.ofNullable()`

            – dehasi
            Apr 11 at 12:15






          • 1





            Sorry, you are right. I've upvoted :)

            – dehasi
            Apr 11 at 12:17






          • 1





            Return type is boolean so .orElse(true); would be better.

            – user11153
            Apr 11 at 12:54






          • 2





            @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

            – ave4496
            Apr 11 at 14:07












          • 9





            Boolean.FALSE::equals instead of source -> !source if you really love method reference

            – Adrian
            Apr 11 at 11:15






          • 2





            I think you meant ` Optional.ofNullable()`

            – dehasi
            Apr 11 at 12:15






          • 1





            Sorry, you are right. I've upvoted :)

            – dehasi
            Apr 11 at 12:17






          • 1





            Return type is boolean so .orElse(true); would be better.

            – user11153
            Apr 11 at 12:54






          • 2





            @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

            – ave4496
            Apr 11 at 14:07







          9




          9





          Boolean.FALSE::equals instead of source -> !source if you really love method reference

          – Adrian
          Apr 11 at 11:15





          Boolean.FALSE::equals instead of source -> !source if you really love method reference

          – Adrian
          Apr 11 at 11:15




          2




          2





          I think you meant ` Optional.ofNullable()`

          – dehasi
          Apr 11 at 12:15





          I think you meant ` Optional.ofNullable()`

          – dehasi
          Apr 11 at 12:15




          1




          1





          Sorry, you are right. I've upvoted :)

          – dehasi
          Apr 11 at 12:17





          Sorry, you are right. I've upvoted :)

          – dehasi
          Apr 11 at 12:17




          1




          1





          Return type is boolean so .orElse(true); would be better.

          – user11153
          Apr 11 at 12:54





          Return type is boolean so .orElse(true); would be better.

          – user11153
          Apr 11 at 12:54




          2




          2





          @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

          – ave4496
          Apr 11 at 14:07





          @user11153 The parameter requires a Boolean.. you give it a boolean and so it has to be boxed. It's not one unboxing less but one boxing more

          – ave4496
          Apr 11 at 14:07













          15














          The following will return true if any one of is null. If all values are not null, it returns !source.



          private boolean sourceWebsite(Registration registration) 


          Updated :



          If you want that every getter not called more than once then you can declare variable for every object like



          private boolean sourceWebsite(Registration registration) !source;







          share|improve this answer




















          • 5





            The null-conditional operator (?.) of c# is for shure a nice thing...

            – keuleJ
            Apr 11 at 10:52






          • 3





            One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

            – Philipp
            Apr 11 at 11:45












          • @Philipp yes. But in general getters are trivial.

            – Khalid Shah
            Apr 11 at 11:47






          • 5





            In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

            – Philipp
            Apr 11 at 11:49






          • 1





            @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

            – Philipp
            Apr 11 at 15:25















          15














          The following will return true if any one of is null. If all values are not null, it returns !source.



          private boolean sourceWebsite(Registration registration) 


          Updated :



          If you want that every getter not called more than once then you can declare variable for every object like



          private boolean sourceWebsite(Registration registration) !source;







          share|improve this answer




















          • 5





            The null-conditional operator (?.) of c# is for shure a nice thing...

            – keuleJ
            Apr 11 at 10:52






          • 3





            One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

            – Philipp
            Apr 11 at 11:45












          • @Philipp yes. But in general getters are trivial.

            – Khalid Shah
            Apr 11 at 11:47






          • 5





            In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

            – Philipp
            Apr 11 at 11:49






          • 1





            @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

            – Philipp
            Apr 11 at 15:25













          15












          15








          15







          The following will return true if any one of is null. If all values are not null, it returns !source.



          private boolean sourceWebsite(Registration registration) 


          Updated :



          If you want that every getter not called more than once then you can declare variable for every object like



          private boolean sourceWebsite(Registration registration) !source;







          share|improve this answer















          The following will return true if any one of is null. If all values are not null, it returns !source.



          private boolean sourceWebsite(Registration registration) 


          Updated :



          If you want that every getter not called more than once then you can declare variable for every object like



          private boolean sourceWebsite(Registration registration) !source;








          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 15 at 4:00

























          answered Apr 11 at 10:50









          Khalid ShahKhalid Shah

          2,37521025




          2,37521025







          • 5





            The null-conditional operator (?.) of c# is for shure a nice thing...

            – keuleJ
            Apr 11 at 10:52






          • 3





            One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

            – Philipp
            Apr 11 at 11:45












          • @Philipp yes. But in general getters are trivial.

            – Khalid Shah
            Apr 11 at 11:47






          • 5





            In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

            – Philipp
            Apr 11 at 11:49






          • 1





            @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

            – Philipp
            Apr 11 at 15:25












          • 5





            The null-conditional operator (?.) of c# is for shure a nice thing...

            – keuleJ
            Apr 11 at 10:52






          • 3





            One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

            – Philipp
            Apr 11 at 11:45












          • @Philipp yes. But in general getters are trivial.

            – Khalid Shah
            Apr 11 at 11:47






          • 5





            In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

            – Philipp
            Apr 11 at 11:49






          • 1





            @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

            – Philipp
            Apr 11 at 15:25







          5




          5





          The null-conditional operator (?.) of c# is for shure a nice thing...

          – keuleJ
          Apr 11 at 10:52





          The null-conditional operator (?.) of c# is for shure a nice thing...

          – keuleJ
          Apr 11 at 10:52




          3




          3





          One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

          – Philipp
          Apr 11 at 11:45






          One problem I see is with that pattern is that it executes getApplication 4 times, getMetadata 3 times and getSource 2 times. If they are all trivial getters, this might not be that much of a problem. But if their implementation is non-trivial (or even worse: not side-effect free) this might become a problem.

          – Philipp
          Apr 11 at 11:45














          @Philipp yes. But in general getters are trivial.

          – Khalid Shah
          Apr 11 at 11:47





          @Philipp yes. But in general getters are trivial.

          – Khalid Shah
          Apr 11 at 11:47




          5




          5





          In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

          – Philipp
          Apr 11 at 11:49





          In general they should be side-effect free, but that assumes that you are working with classes written by people who knew what they were doing and followed good software engineering principles and Java best practices. In the real world, that's a very brave assumption.

          – Philipp
          Apr 11 at 11:49




          1




          1





          @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

          – Philipp
          Apr 11 at 15:25





          @EricDuminil You generally can not rely on that. The JVM might be able to optimize these method calls away when they are trivial getters, but it might not be able to do that when they have some logic and it certainly won't be able to do it when they have side-effects.

          – Philipp
          Apr 11 at 15:25











          2














          Another option you can use is a try-catch block. If you get a null pointer exception return true.



          private boolean sourceWebsite(Registration registration) 
          try
          return !registration.getApplication().getMetadata().getSource();

          catch (NullPointerException e)
          return true;







          share|improve this answer




















          • 6





            You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

            – Nzall
            Apr 11 at 13:46






          • 1





            In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

            – CaptianObvious
            Apr 11 at 13:53






          • 1





            @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

            – Old Nick
            Apr 11 at 15:00











          • Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

            – Zoe
            Apr 11 at 15:08











          • Until a NPE is thrown much deeper in one of those methods.

            – Koekje
            Apr 11 at 15:56















          2














          Another option you can use is a try-catch block. If you get a null pointer exception return true.



          private boolean sourceWebsite(Registration registration) 
          try
          return !registration.getApplication().getMetadata().getSource();

          catch (NullPointerException e)
          return true;







          share|improve this answer




















          • 6





            You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

            – Nzall
            Apr 11 at 13:46






          • 1





            In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

            – CaptianObvious
            Apr 11 at 13:53






          • 1





            @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

            – Old Nick
            Apr 11 at 15:00











          • Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

            – Zoe
            Apr 11 at 15:08











          • Until a NPE is thrown much deeper in one of those methods.

            – Koekje
            Apr 11 at 15:56













          2












          2








          2







          Another option you can use is a try-catch block. If you get a null pointer exception return true.



          private boolean sourceWebsite(Registration registration) 
          try
          return !registration.getApplication().getMetadata().getSource();

          catch (NullPointerException e)
          return true;







          share|improve this answer















          Another option you can use is a try-catch block. If you get a null pointer exception return true.



          private boolean sourceWebsite(Registration registration) 
          try
          return !registration.getApplication().getMetadata().getSource();

          catch (NullPointerException e)
          return true;








          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 11 at 14:23

























          answered Apr 11 at 13:41









          CaptianObviousCaptianObvious

          6313




          6313







          • 6





            You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

            – Nzall
            Apr 11 at 13:46






          • 1





            In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

            – CaptianObvious
            Apr 11 at 13:53






          • 1





            @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

            – Old Nick
            Apr 11 at 15:00











          • Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

            – Zoe
            Apr 11 at 15:08











          • Until a NPE is thrown much deeper in one of those methods.

            – Koekje
            Apr 11 at 15:56












          • 6





            You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

            – Nzall
            Apr 11 at 13:46






          • 1





            In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

            – CaptianObvious
            Apr 11 at 13:53






          • 1





            @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

            – Old Nick
            Apr 11 at 15:00











          • Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

            – Zoe
            Apr 11 at 15:08











          • Until a NPE is thrown much deeper in one of those methods.

            – Koekje
            Apr 11 at 15:56







          6




          6





          You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

          – Nzall
          Apr 11 at 13:46





          You shouldn't use exceptions for program logic. Exceptions should be used in case of an unrecoverable state in a program where it's better to stop the entire flow rather than try and recover.

          – Nzall
          Apr 11 at 13:46




          1




          1





          In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

          – CaptianObvious
          Apr 11 at 13:53





          In general I do agree with you (doing so might make the code harder to follow if it wasn't this short), and I feel that using Optional is correct choice here (assuming you are using a new enough version of java to have access to it). The question asked for a way to handle these checks without several null checks. This will do that.

          – CaptianObvious
          Apr 11 at 13:53




          1




          1





          @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

          – Old Nick
          Apr 11 at 15:00





          @Nzall Exceptions can also be useful in program logic, for instance as a very readable way of checking if a string parses into a number which is very similar to CaptainObvious answer.

          – Old Nick
          Apr 11 at 15:00













          Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

          – Zoe
          Apr 11 at 15:08





          Backing up the comment from Nzall: stackoverflow.com/a/8255933/6296561 - TL;DR: exceptions are heavy

          – Zoe
          Apr 11 at 15:08













          Until a NPE is thrown much deeper in one of those methods.

          – Koekje
          Apr 11 at 15:56





          Until a NPE is thrown much deeper in one of those methods.

          – Koekje
          Apr 11 at 15:56











          -2














          You could do it using a hacky method like this:



          public static Object get(Object o, String... m) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException m.length == 0) 
          return null;

          for (String m1 : m)
          o = o.getClass().getMethod(m1).invoke(o);
          if (o == null)
          return null;


          return o;



          And call it like this:



          Boolean source = (Boolean) get(registration, "getApplication", "getMetadata", "getSource");
          return source == null ? false : !source;


          But I wouldn't do it this way in any serious projects.






          share|improve this answer




















          • 2





            This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

            – julodnik
            Apr 11 at 14:56












          • It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

            – Eric Duminil
            Apr 11 at 16:38















          -2














          You could do it using a hacky method like this:



          public static Object get(Object o, String... m) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException m.length == 0) 
          return null;

          for (String m1 : m)
          o = o.getClass().getMethod(m1).invoke(o);
          if (o == null)
          return null;


          return o;



          And call it like this:



          Boolean source = (Boolean) get(registration, "getApplication", "getMetadata", "getSource");
          return source == null ? false : !source;


          But I wouldn't do it this way in any serious projects.






          share|improve this answer




















          • 2





            This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

            – julodnik
            Apr 11 at 14:56












          • It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

            – Eric Duminil
            Apr 11 at 16:38













          -2












          -2








          -2







          You could do it using a hacky method like this:



          public static Object get(Object o, String... m) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException m.length == 0) 
          return null;

          for (String m1 : m)
          o = o.getClass().getMethod(m1).invoke(o);
          if (o == null)
          return null;


          return o;



          And call it like this:



          Boolean source = (Boolean) get(registration, "getApplication", "getMetadata", "getSource");
          return source == null ? false : !source;


          But I wouldn't do it this way in any serious projects.






          share|improve this answer















          You could do it using a hacky method like this:



          public static Object get(Object o, String... m) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException m.length == 0) 
          return null;

          for (String m1 : m)
          o = o.getClass().getMethod(m1).invoke(o);
          if (o == null)
          return null;


          return o;



          And call it like this:



          Boolean source = (Boolean) get(registration, "getApplication", "getMetadata", "getSource");
          return source == null ? false : !source;


          But I wouldn't do it this way in any serious projects.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 11 at 13:15

























          answered Apr 11 at 13:03









          Mika LammiMika Lammi

          973619




          973619







          • 2





            This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

            – julodnik
            Apr 11 at 14:56












          • It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

            – Eric Duminil
            Apr 11 at 16:38












          • 2





            This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

            – julodnik
            Apr 11 at 14:56












          • It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

            – Eric Duminil
            Apr 11 at 16:38







          2




          2





          This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

          – julodnik
          Apr 11 at 14:56






          This is bad code in so many aspects: slow, not controlled by the compiler, immune to refactoring aids from the IDE. Even you recognize that you wouldn't use this in any serious projects. But then: what's the point? No one would bother to post a question or even read the answers for unserious projects.

          – julodnik
          Apr 11 at 14:56














          It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

          – Eric Duminil
          Apr 11 at 16:38





          It could become a bit better if you passed Methods as parameters instead of strings. It would probably look a bit like return Optional.of(registration).map(Registration::getApplication).map(Application::getMetadata).map(Metadata::getSource) so you might as well use Optional directly. Still, I don't think you deserved downvotes. This method is still interesting as a thought experiment.

          – Eric Duminil
          Apr 11 at 16:38



          Popular posts from this blog

          Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

          Creating closest line along the point''s azimuth using PostgreSQL Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

          Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given