Null in functional interface with different type return
I write this code, but I don't know why it compiles.
The UnaryOperator takes a specific type argument and returns the result with the same type of its argument.
My question: if I put an if-statement with the return null, isn't there a compiler error?
null isn't the type of the its argument (in my case is Doll)?
Can a built-in functional interface (like Consumer, UnaryOperator, Function) return null instead of its standard return?
This is my code:
import java.util.function.*;
public class Doll {
private int layer;
public Doll(int layer) {
super();
this.layer = layer;
}
public static void open(UnaryOperator<Doll> task, Doll doll) {
while ((doll = task.apply(doll)) != null) {
System.out.println("X");
}
}
public static void main(String args) {
open(s -> {
if (s.layer <= 0)
return null;
else
return new Doll(s.layer--);
}, new Doll(5));
}
}
Thanks a lot!
java if-statement return-type unary-operator
add a comment |
I write this code, but I don't know why it compiles.
The UnaryOperator takes a specific type argument and returns the result with the same type of its argument.
My question: if I put an if-statement with the return null, isn't there a compiler error?
null isn't the type of the its argument (in my case is Doll)?
Can a built-in functional interface (like Consumer, UnaryOperator, Function) return null instead of its standard return?
This is my code:
import java.util.function.*;
public class Doll {
private int layer;
public Doll(int layer) {
super();
this.layer = layer;
}
public static void open(UnaryOperator<Doll> task, Doll doll) {
while ((doll = task.apply(doll)) != null) {
System.out.println("X");
}
}
public static void main(String args) {
open(s -> {
if (s.layer <= 0)
return null;
else
return new Doll(s.layer--);
}, new Doll(5));
}
}
Thanks a lot!
java if-statement return-type unary-operator
add a comment |
I write this code, but I don't know why it compiles.
The UnaryOperator takes a specific type argument and returns the result with the same type of its argument.
My question: if I put an if-statement with the return null, isn't there a compiler error?
null isn't the type of the its argument (in my case is Doll)?
Can a built-in functional interface (like Consumer, UnaryOperator, Function) return null instead of its standard return?
This is my code:
import java.util.function.*;
public class Doll {
private int layer;
public Doll(int layer) {
super();
this.layer = layer;
}
public static void open(UnaryOperator<Doll> task, Doll doll) {
while ((doll = task.apply(doll)) != null) {
System.out.println("X");
}
}
public static void main(String args) {
open(s -> {
if (s.layer <= 0)
return null;
else
return new Doll(s.layer--);
}, new Doll(5));
}
}
Thanks a lot!
java if-statement return-type unary-operator
I write this code, but I don't know why it compiles.
The UnaryOperator takes a specific type argument and returns the result with the same type of its argument.
My question: if I put an if-statement with the return null, isn't there a compiler error?
null isn't the type of the its argument (in my case is Doll)?
Can a built-in functional interface (like Consumer, UnaryOperator, Function) return null instead of its standard return?
This is my code:
import java.util.function.*;
public class Doll {
private int layer;
public Doll(int layer) {
super();
this.layer = layer;
}
public static void open(UnaryOperator<Doll> task, Doll doll) {
while ((doll = task.apply(doll)) != null) {
System.out.println("X");
}
}
public static void main(String args) {
open(s -> {
if (s.layer <= 0)
return null;
else
return new Doll(s.layer--);
}, new Doll(5));
}
}
Thanks a lot!
java if-statement return-type unary-operator
java if-statement return-type unary-operator
edited Nov 12 '18 at 15:19
deHaar
2,15631527
2,15631527
asked Nov 12 '18 at 15:01
Adryr83
889
889
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Think of it this way:
Doll d = null;
null is a valid reference for any object, and isn't different for functional interfaces.
add a comment |
There's nothing special about built-in functional interfaces. Any method that returns a reference type can return null. This includes the lambda expression implementation of the method of a functional interface.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264859%2fnull-in-functional-interface-with-different-type-return%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Think of it this way:
Doll d = null;
null is a valid reference for any object, and isn't different for functional interfaces.
add a comment |
Think of it this way:
Doll d = null;
null is a valid reference for any object, and isn't different for functional interfaces.
add a comment |
Think of it this way:
Doll d = null;
null is a valid reference for any object, and isn't different for functional interfaces.
Think of it this way:
Doll d = null;
null is a valid reference for any object, and isn't different for functional interfaces.
answered Nov 12 '18 at 15:05
Jacob G.
15.2k52162
15.2k52162
add a comment |
add a comment |
There's nothing special about built-in functional interfaces. Any method that returns a reference type can return null. This includes the lambda expression implementation of the method of a functional interface.
add a comment |
There's nothing special about built-in functional interfaces. Any method that returns a reference type can return null. This includes the lambda expression implementation of the method of a functional interface.
add a comment |
There's nothing special about built-in functional interfaces. Any method that returns a reference type can return null. This includes the lambda expression implementation of the method of a functional interface.
There's nothing special about built-in functional interfaces. Any method that returns a reference type can return null. This includes the lambda expression implementation of the method of a functional interface.
answered Nov 12 '18 at 15:05
Eran
280k37452538
280k37452538
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264859%2fnull-in-functional-interface-with-different-type-return%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown