Java 8 Optional. Why of and ofNullable? [duplicate]












17
















This question already has an answer here:




  • Why use Optional.of over Optional.ofNullable?

    3 answers



  • Uses for Optional

    13 answers



  • Is there a real reason to use Optional.of()?

    8 answers




I have a question regarding Java 8's Optional, the purpose of which is to tackle NullPointerException exceptions.



The question is, what is the reason for having both types to let us choose:



Optional.of(T value)     <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value


Because what I expect is, when I use:



Optional.of(nullValue);


It won't throw a NullPointerException.





Expanded my question after some replies:



Why would people opt for Optional instead of normal if-else for null checking?










share|improve this question















marked as duplicate by Roland, Boann, Daniel Pryden 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();
}
);
});
});
Dec 17 '18 at 14:02


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.











  • 1





    You may want to return a value wrapped with Optional. In this case, you can use Optional.of(value); .

    – Emre Savcı
    Dec 17 '18 at 6:51






  • 3





    Two out of three answers provided by people call NullPointer. How apt for this question....

    – Thilo
    Dec 17 '18 at 7:07






  • 7





    Because, as others have said in answers, Optional is designed to reduce NPEs at the method caller level, not necessarily at the method implementation level. Optional.of is for when one knows the value is not null (and an error should be thrown if it is), Optional.empty is for when one knows the value is null, and Optional.ofNullable is for when one is not sure if the value is null or not.

    – Slaw
    Dec 17 '18 at 7:58








  • 2





    Biggest question for me is why the chose the naming that way. I would use .of() for nullable values and then make ofNotNull() for non null values, as this latter is way less used.

    – Robert Niestroj
    Dec 17 '18 at 7:59






  • 2





    @JollyJoker In cases where the logic of the (Optional returning) method deems the result has been found and is not, or should not be, null. One example would be "short-circuiting" a loop when a match is found by returning Optional.of(matchedItem). If no match was found the loop would complete and the method would return Optional.empty. However, there are (perhaps more frequent, perhaps not) cases where even the method cannot know if the result is null or not and must use Optional.ofNullable when returning.

    – Slaw
    Dec 17 '18 at 9:10


















17
















This question already has an answer here:




  • Why use Optional.of over Optional.ofNullable?

    3 answers



  • Uses for Optional

    13 answers



  • Is there a real reason to use Optional.of()?

    8 answers




I have a question regarding Java 8's Optional, the purpose of which is to tackle NullPointerException exceptions.



The question is, what is the reason for having both types to let us choose:



Optional.of(T value)     <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value


Because what I expect is, when I use:



Optional.of(nullValue);


It won't throw a NullPointerException.





Expanded my question after some replies:



Why would people opt for Optional instead of normal if-else for null checking?










share|improve this question















marked as duplicate by Roland, Boann, Daniel Pryden 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();
}
);
});
});
Dec 17 '18 at 14:02


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.











  • 1





    You may want to return a value wrapped with Optional. In this case, you can use Optional.of(value); .

    – Emre Savcı
    Dec 17 '18 at 6:51






  • 3





    Two out of three answers provided by people call NullPointer. How apt for this question....

    – Thilo
    Dec 17 '18 at 7:07






  • 7





    Because, as others have said in answers, Optional is designed to reduce NPEs at the method caller level, not necessarily at the method implementation level. Optional.of is for when one knows the value is not null (and an error should be thrown if it is), Optional.empty is for when one knows the value is null, and Optional.ofNullable is for when one is not sure if the value is null or not.

    – Slaw
    Dec 17 '18 at 7:58








  • 2





    Biggest question for me is why the chose the naming that way. I would use .of() for nullable values and then make ofNotNull() for non null values, as this latter is way less used.

    – Robert Niestroj
    Dec 17 '18 at 7:59






  • 2





    @JollyJoker In cases where the logic of the (Optional returning) method deems the result has been found and is not, or should not be, null. One example would be "short-circuiting" a loop when a match is found by returning Optional.of(matchedItem). If no match was found the loop would complete and the method would return Optional.empty. However, there are (perhaps more frequent, perhaps not) cases where even the method cannot know if the result is null or not and must use Optional.ofNullable when returning.

    – Slaw
    Dec 17 '18 at 9:10
















17












17








17


2







This question already has an answer here:




  • Why use Optional.of over Optional.ofNullable?

    3 answers



  • Uses for Optional

    13 answers



  • Is there a real reason to use Optional.of()?

    8 answers




I have a question regarding Java 8's Optional, the purpose of which is to tackle NullPointerException exceptions.



The question is, what is the reason for having both types to let us choose:



Optional.of(T value)     <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value


Because what I expect is, when I use:



Optional.of(nullValue);


It won't throw a NullPointerException.





Expanded my question after some replies:



Why would people opt for Optional instead of normal if-else for null checking?










share|improve this question

















This question already has an answer here:




  • Why use Optional.of over Optional.ofNullable?

    3 answers



  • Uses for Optional

    13 answers



  • Is there a real reason to use Optional.of()?

    8 answers




I have a question regarding Java 8's Optional, the purpose of which is to tackle NullPointerException exceptions.



The question is, what is the reason for having both types to let us choose:



Optional.of(T value)     <-----non-null value, null value will throw NPE
Optional.ofNullable(T value) <----- nullable value


Because what I expect is, when I use:



Optional.of(nullValue);


It won't throw a NullPointerException.





Expanded my question after some replies:



Why would people opt for Optional instead of normal if-else for null checking?





This question already has an answer here:




  • Why use Optional.of over Optional.ofNullable?

    3 answers



  • Uses for Optional

    13 answers



  • Is there a real reason to use Optional.of()?

    8 answers








java java-8 optional






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 17 '18 at 13:37









Boann

36.8k1288121




36.8k1288121










asked Dec 17 '18 at 6:38









hadeshades

83811132




83811132




marked as duplicate by Roland, Boann, Daniel Pryden 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();
}
);
});
});
Dec 17 '18 at 14:02


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 Roland, Boann, Daniel Pryden 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();
}
);
});
});
Dec 17 '18 at 14:02


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.










  • 1





    You may want to return a value wrapped with Optional. In this case, you can use Optional.of(value); .

    – Emre Savcı
    Dec 17 '18 at 6:51






  • 3





    Two out of three answers provided by people call NullPointer. How apt for this question....

    – Thilo
    Dec 17 '18 at 7:07






  • 7





    Because, as others have said in answers, Optional is designed to reduce NPEs at the method caller level, not necessarily at the method implementation level. Optional.of is for when one knows the value is not null (and an error should be thrown if it is), Optional.empty is for when one knows the value is null, and Optional.ofNullable is for when one is not sure if the value is null or not.

    – Slaw
    Dec 17 '18 at 7:58








  • 2





    Biggest question for me is why the chose the naming that way. I would use .of() for nullable values and then make ofNotNull() for non null values, as this latter is way less used.

    – Robert Niestroj
    Dec 17 '18 at 7:59






  • 2





    @JollyJoker In cases where the logic of the (Optional returning) method deems the result has been found and is not, or should not be, null. One example would be "short-circuiting" a loop when a match is found by returning Optional.of(matchedItem). If no match was found the loop would complete and the method would return Optional.empty. However, there are (perhaps more frequent, perhaps not) cases where even the method cannot know if the result is null or not and must use Optional.ofNullable when returning.

    – Slaw
    Dec 17 '18 at 9:10
















  • 1





    You may want to return a value wrapped with Optional. In this case, you can use Optional.of(value); .

    – Emre Savcı
    Dec 17 '18 at 6:51






  • 3





    Two out of three answers provided by people call NullPointer. How apt for this question....

    – Thilo
    Dec 17 '18 at 7:07






  • 7





    Because, as others have said in answers, Optional is designed to reduce NPEs at the method caller level, not necessarily at the method implementation level. Optional.of is for when one knows the value is not null (and an error should be thrown if it is), Optional.empty is for when one knows the value is null, and Optional.ofNullable is for when one is not sure if the value is null or not.

    – Slaw
    Dec 17 '18 at 7:58








  • 2





    Biggest question for me is why the chose the naming that way. I would use .of() for nullable values and then make ofNotNull() for non null values, as this latter is way less used.

    – Robert Niestroj
    Dec 17 '18 at 7:59






  • 2





    @JollyJoker In cases where the logic of the (Optional returning) method deems the result has been found and is not, or should not be, null. One example would be "short-circuiting" a loop when a match is found by returning Optional.of(matchedItem). If no match was found the loop would complete and the method would return Optional.empty. However, there are (perhaps more frequent, perhaps not) cases where even the method cannot know if the result is null or not and must use Optional.ofNullable when returning.

    – Slaw
    Dec 17 '18 at 9:10










1




1





You may want to return a value wrapped with Optional. In this case, you can use Optional.of(value); .

– Emre Savcı
Dec 17 '18 at 6:51





You may want to return a value wrapped with Optional. In this case, you can use Optional.of(value); .

– Emre Savcı
Dec 17 '18 at 6:51




3




3





Two out of three answers provided by people call NullPointer. How apt for this question....

– Thilo
Dec 17 '18 at 7:07





Two out of three answers provided by people call NullPointer. How apt for this question....

– Thilo
Dec 17 '18 at 7:07




7




7





Because, as others have said in answers, Optional is designed to reduce NPEs at the method caller level, not necessarily at the method implementation level. Optional.of is for when one knows the value is not null (and an error should be thrown if it is), Optional.empty is for when one knows the value is null, and Optional.ofNullable is for when one is not sure if the value is null or not.

– Slaw
Dec 17 '18 at 7:58







Because, as others have said in answers, Optional is designed to reduce NPEs at the method caller level, not necessarily at the method implementation level. Optional.of is for when one knows the value is not null (and an error should be thrown if it is), Optional.empty is for when one knows the value is null, and Optional.ofNullable is for when one is not sure if the value is null or not.

– Slaw
Dec 17 '18 at 7:58






2




2





Biggest question for me is why the chose the naming that way. I would use .of() for nullable values and then make ofNotNull() for non null values, as this latter is way less used.

– Robert Niestroj
Dec 17 '18 at 7:59





Biggest question for me is why the chose the naming that way. I would use .of() for nullable values and then make ofNotNull() for non null values, as this latter is way less used.

– Robert Niestroj
Dec 17 '18 at 7:59




2




2





@JollyJoker In cases where the logic of the (Optional returning) method deems the result has been found and is not, or should not be, null. One example would be "short-circuiting" a loop when a match is found by returning Optional.of(matchedItem). If no match was found the loop would complete and the method would return Optional.empty. However, there are (perhaps more frequent, perhaps not) cases where even the method cannot know if the result is null or not and must use Optional.ofNullable when returning.

– Slaw
Dec 17 '18 at 9:10







@JollyJoker In cases where the logic of the (Optional returning) method deems the result has been found and is not, or should not be, null. One example would be "short-circuiting" a loop when a match is found by returning Optional.of(matchedItem). If no match was found the loop would complete and the method would return Optional.empty. However, there are (perhaps more frequent, perhaps not) cases where even the method cannot know if the result is null or not and must use Optional.ofNullable when returning.

– Slaw
Dec 17 '18 at 9:10














6 Answers
6






active

oldest

votes


















21














The javadoc of Optional.of reads that explicitly :



@throws NullPointerException if value is null


and that is where the requirement of handling the cases as expected by you comes into picture with the use of Optional.ofNullable which is a small block of code as :



public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value); // 'Optional.of'
}


That said, the decision of choosing one over the other would still reside with the application design as if your value could possibly be null or not.





On your expectation part, that was not what the Optional was actually intended for. The API note clarifies this further (formatting mine):




Optional is primarily intended for use as a method return type where
there is a clear need to represent "no result," and where using
null is likely to cause error. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.







purpose of Optional is to tackle NullPointerException exception.




Aside: Just to call it out clearly, that the choice would of course implicitly let you define if an NPE should be thrown at runtime or not. It's not determined at the compile time though.






share|improve this answer





















  • 4





    So shouldn't you be Optional.empty()pointer?

    – chrylis
    Dec 17 '18 at 9:42






  • 3





    @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

    – nullpointer
    Dec 17 '18 at 10:34






  • 1





    If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

    – bohemian
    Dec 17 '18 at 10:36



















13















the purpose of Optional is to tackle NullPointerException exception




Yes, it is, but at usage time not at creation.



So when you receive an Optional from a method then you can avoid NPE by using Optional.ifPresent, Optional.orElse,Optional.orElseGet and Optional.orElseThrow methods.



But this is not the case when you're creating an Optional. Since it's your own method you have to know whether the object is nullable or not.






The main point of Optional is to provide a means for a function returning a value to indicate the absence of a return value. See this discussion. This allows the caller to continue a chain of fluent method calls.



Stuart Marks




Please read this post for more detailed explanation.






share|improve this answer

































    5














    I think it's quite simple and clear with Javadoc:



    Optional.of(T value) is used when you are sure that there is never a null value and incase null value occurs than program throws NullPointerException and consider as bug.



    Optional.ofNullable(T value) is used when you know that there can be a null value and in case of it your program should behave normally.





    Why would people opt for Optional instead of normal if-else method for null checking?






    share|improve this answer

































      4















      Why would people opt for Optional instead of normal if-else method for null checking?




      The main point of Optional<T> class is to provide a mean for performing null safe mapping operations.



      employeeOptional.map(Employee::getName).map(String::toUpperCase).ifPresent(upperCasedNameConsumer)



      The expression above can replace a cascade of if-else statements in a single readable expression.



      Optional.of provides an assertion for the given argument to be a null-null value, otherwise, you can opt for Optional.ofNullable if you are not sure about the input.



      I strongly recommend you to read the javadoc for Optional<T> class for more optional chaining methods that you can use for your advantage.






      share|improve this answer































        4














        After reading some answers and comments I think this explanation is missing. Consider a method like



        public Optional<String> name(Customer c) {
        return c.isNew() ? Optional.ofNullable(getName(c)) : Optional.of(getName(c));
        }


        Here you want to throw a NullPointerException if the customer isn't new and is supposed to have a name; your code is inconsistent if that's ever null. Yet the name may not yet exist if the customer is new, hence ofNullable in that case and the method returns Optional.






        share|improve this answer

































          0
















          • Optional.ofNullable is a wrapper around existing APIs that can return null. You would call it as a consumer of an API.


          • Optional.of/Optional.empty is for new code written with Optional in mind. You would return an Optional created with of/empty as a provider of an API.






          share|improve this answer






























            6 Answers
            6






            active

            oldest

            votes








            6 Answers
            6






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            21














            The javadoc of Optional.of reads that explicitly :



            @throws NullPointerException if value is null


            and that is where the requirement of handling the cases as expected by you comes into picture with the use of Optional.ofNullable which is a small block of code as :



            public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value); // 'Optional.of'
            }


            That said, the decision of choosing one over the other would still reside with the application design as if your value could possibly be null or not.





            On your expectation part, that was not what the Optional was actually intended for. The API note clarifies this further (formatting mine):




            Optional is primarily intended for use as a method return type where
            there is a clear need to represent "no result," and where using
            null is likely to cause error. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.







            purpose of Optional is to tackle NullPointerException exception.




            Aside: Just to call it out clearly, that the choice would of course implicitly let you define if an NPE should be thrown at runtime or not. It's not determined at the compile time though.






            share|improve this answer





















            • 4





              So shouldn't you be Optional.empty()pointer?

              – chrylis
              Dec 17 '18 at 9:42






            • 3





              @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

              – nullpointer
              Dec 17 '18 at 10:34






            • 1





              If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

              – bohemian
              Dec 17 '18 at 10:36
















            21














            The javadoc of Optional.of reads that explicitly :



            @throws NullPointerException if value is null


            and that is where the requirement of handling the cases as expected by you comes into picture with the use of Optional.ofNullable which is a small block of code as :



            public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value); // 'Optional.of'
            }


            That said, the decision of choosing one over the other would still reside with the application design as if your value could possibly be null or not.





            On your expectation part, that was not what the Optional was actually intended for. The API note clarifies this further (formatting mine):




            Optional is primarily intended for use as a method return type where
            there is a clear need to represent "no result," and where using
            null is likely to cause error. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.







            purpose of Optional is to tackle NullPointerException exception.




            Aside: Just to call it out clearly, that the choice would of course implicitly let you define if an NPE should be thrown at runtime or not. It's not determined at the compile time though.






            share|improve this answer





















            • 4





              So shouldn't you be Optional.empty()pointer?

              – chrylis
              Dec 17 '18 at 9:42






            • 3





              @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

              – nullpointer
              Dec 17 '18 at 10:34






            • 1





              If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

              – bohemian
              Dec 17 '18 at 10:36














            21












            21








            21







            The javadoc of Optional.of reads that explicitly :



            @throws NullPointerException if value is null


            and that is where the requirement of handling the cases as expected by you comes into picture with the use of Optional.ofNullable which is a small block of code as :



            public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value); // 'Optional.of'
            }


            That said, the decision of choosing one over the other would still reside with the application design as if your value could possibly be null or not.





            On your expectation part, that was not what the Optional was actually intended for. The API note clarifies this further (formatting mine):




            Optional is primarily intended for use as a method return type where
            there is a clear need to represent "no result," and where using
            null is likely to cause error. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.







            purpose of Optional is to tackle NullPointerException exception.




            Aside: Just to call it out clearly, that the choice would of course implicitly let you define if an NPE should be thrown at runtime or not. It's not determined at the compile time though.






            share|improve this answer















            The javadoc of Optional.of reads that explicitly :



            @throws NullPointerException if value is null


            and that is where the requirement of handling the cases as expected by you comes into picture with the use of Optional.ofNullable which is a small block of code as :



            public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value); // 'Optional.of'
            }


            That said, the decision of choosing one over the other would still reside with the application design as if your value could possibly be null or not.





            On your expectation part, that was not what the Optional was actually intended for. The API note clarifies this further (formatting mine):




            Optional is primarily intended for use as a method return type where
            there is a clear need to represent "no result," and where using
            null is likely to cause error. A variable whose type is Optional should never itself be null; it should always point to an Optional instance.







            purpose of Optional is to tackle NullPointerException exception.




            Aside: Just to call it out clearly, that the choice would of course implicitly let you define if an NPE should be thrown at runtime or not. It's not determined at the compile time though.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 17 '18 at 10:48

























            answered Dec 17 '18 at 6:42









            nullpointernullpointer

            45.7k1198188




            45.7k1198188








            • 4





              So shouldn't you be Optional.empty()pointer?

              – chrylis
              Dec 17 '18 at 9:42






            • 3





              @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

              – nullpointer
              Dec 17 '18 at 10:34






            • 1





              If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

              – bohemian
              Dec 17 '18 at 10:36














            • 4





              So shouldn't you be Optional.empty()pointer?

              – chrylis
              Dec 17 '18 at 9:42






            • 3





              @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

              – nullpointer
              Dec 17 '18 at 10:34






            • 1





              If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

              – bohemian
              Dec 17 '18 at 10:36








            4




            4





            So shouldn't you be Optional.empty()pointer?

            – chrylis
            Dec 17 '18 at 9:42





            So shouldn't you be Optional.empty()pointer?

            – chrylis
            Dec 17 '18 at 9:42




            3




            3





            @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

            – nullpointer
            Dec 17 '18 at 10:34





            @chrylis oh I don't want to be that safe, I can afford to be thrown at the runtime. :)

            – nullpointer
            Dec 17 '18 at 10:34




            1




            1





            If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

            – bohemian
            Dec 17 '18 at 10:36





            If this is to become the answer, I suggest adding something @ETO mentioned below: "[Throws NPE] at usage time not at creation"

            – bohemian
            Dec 17 '18 at 10:36













            13















            the purpose of Optional is to tackle NullPointerException exception




            Yes, it is, but at usage time not at creation.



            So when you receive an Optional from a method then you can avoid NPE by using Optional.ifPresent, Optional.orElse,Optional.orElseGet and Optional.orElseThrow methods.



            But this is not the case when you're creating an Optional. Since it's your own method you have to know whether the object is nullable or not.






            The main point of Optional is to provide a means for a function returning a value to indicate the absence of a return value. See this discussion. This allows the caller to continue a chain of fluent method calls.



            Stuart Marks




            Please read this post for more detailed explanation.






            share|improve this answer






























              13















              the purpose of Optional is to tackle NullPointerException exception




              Yes, it is, but at usage time not at creation.



              So when you receive an Optional from a method then you can avoid NPE by using Optional.ifPresent, Optional.orElse,Optional.orElseGet and Optional.orElseThrow methods.



              But this is not the case when you're creating an Optional. Since it's your own method you have to know whether the object is nullable or not.






              The main point of Optional is to provide a means for a function returning a value to indicate the absence of a return value. See this discussion. This allows the caller to continue a chain of fluent method calls.



              Stuart Marks




              Please read this post for more detailed explanation.






              share|improve this answer




























                13












                13








                13








                the purpose of Optional is to tackle NullPointerException exception




                Yes, it is, but at usage time not at creation.



                So when you receive an Optional from a method then you can avoid NPE by using Optional.ifPresent, Optional.orElse,Optional.orElseGet and Optional.orElseThrow methods.



                But this is not the case when you're creating an Optional. Since it's your own method you have to know whether the object is nullable or not.






                The main point of Optional is to provide a means for a function returning a value to indicate the absence of a return value. See this discussion. This allows the caller to continue a chain of fluent method calls.



                Stuart Marks




                Please read this post for more detailed explanation.






                share|improve this answer
















                the purpose of Optional is to tackle NullPointerException exception




                Yes, it is, but at usage time not at creation.



                So when you receive an Optional from a method then you can avoid NPE by using Optional.ifPresent, Optional.orElse,Optional.orElseGet and Optional.orElseThrow methods.



                But this is not the case when you're creating an Optional. Since it's your own method you have to know whether the object is nullable or not.






                The main point of Optional is to provide a means for a function returning a value to indicate the absence of a return value. See this discussion. This allows the caller to continue a chain of fluent method calls.



                Stuart Marks




                Please read this post for more detailed explanation.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Dec 17 '18 at 11:07

























                answered Dec 17 '18 at 6:53









                ETOETO

                2,445425




                2,445425























                    5














                    I think it's quite simple and clear with Javadoc:



                    Optional.of(T value) is used when you are sure that there is never a null value and incase null value occurs than program throws NullPointerException and consider as bug.



                    Optional.ofNullable(T value) is used when you know that there can be a null value and in case of it your program should behave normally.





                    Why would people opt for Optional instead of normal if-else method for null checking?






                    share|improve this answer






























                      5














                      I think it's quite simple and clear with Javadoc:



                      Optional.of(T value) is used when you are sure that there is never a null value and incase null value occurs than program throws NullPointerException and consider as bug.



                      Optional.ofNullable(T value) is used when you know that there can be a null value and in case of it your program should behave normally.





                      Why would people opt for Optional instead of normal if-else method for null checking?






                      share|improve this answer




























                        5












                        5








                        5







                        I think it's quite simple and clear with Javadoc:



                        Optional.of(T value) is used when you are sure that there is never a null value and incase null value occurs than program throws NullPointerException and consider as bug.



                        Optional.ofNullable(T value) is used when you know that there can be a null value and in case of it your program should behave normally.





                        Why would people opt for Optional instead of normal if-else method for null checking?






                        share|improve this answer















                        I think it's quite simple and clear with Javadoc:



                        Optional.of(T value) is used when you are sure that there is never a null value and incase null value occurs than program throws NullPointerException and consider as bug.



                        Optional.ofNullable(T value) is used when you know that there can be a null value and in case of it your program should behave normally.





                        Why would people opt for Optional instead of normal if-else method for null checking?







                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Dec 21 '18 at 8:43









                        Pang

                        6,8911663101




                        6,8911663101










                        answered Dec 17 '18 at 6:48









                        NullPointerNullPointer

                        4,33921130




                        4,33921130























                            4















                            Why would people opt for Optional instead of normal if-else method for null checking?




                            The main point of Optional<T> class is to provide a mean for performing null safe mapping operations.



                            employeeOptional.map(Employee::getName).map(String::toUpperCase).ifPresent(upperCasedNameConsumer)



                            The expression above can replace a cascade of if-else statements in a single readable expression.



                            Optional.of provides an assertion for the given argument to be a null-null value, otherwise, you can opt for Optional.ofNullable if you are not sure about the input.



                            I strongly recommend you to read the javadoc for Optional<T> class for more optional chaining methods that you can use for your advantage.






                            share|improve this answer




























                              4















                              Why would people opt for Optional instead of normal if-else method for null checking?




                              The main point of Optional<T> class is to provide a mean for performing null safe mapping operations.



                              employeeOptional.map(Employee::getName).map(String::toUpperCase).ifPresent(upperCasedNameConsumer)



                              The expression above can replace a cascade of if-else statements in a single readable expression.



                              Optional.of provides an assertion for the given argument to be a null-null value, otherwise, you can opt for Optional.ofNullable if you are not sure about the input.



                              I strongly recommend you to read the javadoc for Optional<T> class for more optional chaining methods that you can use for your advantage.






                              share|improve this answer


























                                4












                                4








                                4








                                Why would people opt for Optional instead of normal if-else method for null checking?




                                The main point of Optional<T> class is to provide a mean for performing null safe mapping operations.



                                employeeOptional.map(Employee::getName).map(String::toUpperCase).ifPresent(upperCasedNameConsumer)



                                The expression above can replace a cascade of if-else statements in a single readable expression.



                                Optional.of provides an assertion for the given argument to be a null-null value, otherwise, you can opt for Optional.ofNullable if you are not sure about the input.



                                I strongly recommend you to read the javadoc for Optional<T> class for more optional chaining methods that you can use for your advantage.






                                share|improve this answer














                                Why would people opt for Optional instead of normal if-else method for null checking?




                                The main point of Optional<T> class is to provide a mean for performing null safe mapping operations.



                                employeeOptional.map(Employee::getName).map(String::toUpperCase).ifPresent(upperCasedNameConsumer)



                                The expression above can replace a cascade of if-else statements in a single readable expression.



                                Optional.of provides an assertion for the given argument to be a null-null value, otherwise, you can opt for Optional.ofNullable if you are not sure about the input.



                                I strongly recommend you to read the javadoc for Optional<T> class for more optional chaining methods that you can use for your advantage.







                                share|improve this answer












                                share|improve this answer



                                share|improve this answer










                                answered Dec 17 '18 at 8:53









                                HPHHPH

                                1387




                                1387























                                    4














                                    After reading some answers and comments I think this explanation is missing. Consider a method like



                                    public Optional<String> name(Customer c) {
                                    return c.isNew() ? Optional.ofNullable(getName(c)) : Optional.of(getName(c));
                                    }


                                    Here you want to throw a NullPointerException if the customer isn't new and is supposed to have a name; your code is inconsistent if that's ever null. Yet the name may not yet exist if the customer is new, hence ofNullable in that case and the method returns Optional.






                                    share|improve this answer






























                                      4














                                      After reading some answers and comments I think this explanation is missing. Consider a method like



                                      public Optional<String> name(Customer c) {
                                      return c.isNew() ? Optional.ofNullable(getName(c)) : Optional.of(getName(c));
                                      }


                                      Here you want to throw a NullPointerException if the customer isn't new and is supposed to have a name; your code is inconsistent if that's ever null. Yet the name may not yet exist if the customer is new, hence ofNullable in that case and the method returns Optional.






                                      share|improve this answer




























                                        4












                                        4








                                        4







                                        After reading some answers and comments I think this explanation is missing. Consider a method like



                                        public Optional<String> name(Customer c) {
                                        return c.isNew() ? Optional.ofNullable(getName(c)) : Optional.of(getName(c));
                                        }


                                        Here you want to throw a NullPointerException if the customer isn't new and is supposed to have a name; your code is inconsistent if that's ever null. Yet the name may not yet exist if the customer is new, hence ofNullable in that case and the method returns Optional.






                                        share|improve this answer















                                        After reading some answers and comments I think this explanation is missing. Consider a method like



                                        public Optional<String> name(Customer c) {
                                        return c.isNew() ? Optional.ofNullable(getName(c)) : Optional.of(getName(c));
                                        }


                                        Here you want to throw a NullPointerException if the customer isn't new and is supposed to have a name; your code is inconsistent if that's ever null. Yet the name may not yet exist if the customer is new, hence ofNullable in that case and the method returns Optional.







                                        share|improve this answer














                                        share|improve this answer



                                        share|improve this answer








                                        edited Dec 17 '18 at 9:16

























                                        answered Dec 17 '18 at 9:09









                                        JollyJokerJollyJoker

                                        1514




                                        1514























                                            0
















                                            • Optional.ofNullable is a wrapper around existing APIs that can return null. You would call it as a consumer of an API.


                                            • Optional.of/Optional.empty is for new code written with Optional in mind. You would return an Optional created with of/empty as a provider of an API.






                                            share|improve this answer




























                                              0
















                                              • Optional.ofNullable is a wrapper around existing APIs that can return null. You would call it as a consumer of an API.


                                              • Optional.of/Optional.empty is for new code written with Optional in mind. You would return an Optional created with of/empty as a provider of an API.






                                              share|improve this answer


























                                                0












                                                0








                                                0









                                                • Optional.ofNullable is a wrapper around existing APIs that can return null. You would call it as a consumer of an API.


                                                • Optional.of/Optional.empty is for new code written with Optional in mind. You would return an Optional created with of/empty as a provider of an API.






                                                share|improve this answer















                                                • Optional.ofNullable is a wrapper around existing APIs that can return null. You would call it as a consumer of an API.


                                                • Optional.of/Optional.empty is for new code written with Optional in mind. You would return an Optional created with of/empty as a provider of an API.







                                                share|improve this answer












                                                share|improve this answer



                                                share|improve this answer










                                                answered Dec 17 '18 at 12:24









                                                dntdnt

                                                335




                                                335















                                                    Popular posts from this blog

                                                    Сан-Квентин

                                                    8-я гвардейская общевойсковая армия

                                                    Алькесар