Custom functional interface as method argumentHow does a method “reference to an instance method of an arbitrary object of a particular type” resolve the arbitrary object?Sort ArrayList of custom Objects by propertyCompile all files in src?Clone a single tone objectMethod override returns nullExecutorService workStealingPool and cancel methodJava - Method executed prior to Default ConstructorWhen use java regular-expression pattern.matcher(), source does not match regex.But, my hope result is ,source matches regexabstract class using its own abstract methodWould it make any difference giving arguments using scanner class instead of command line arguments?java exception - why does it catch?
Pre-mixing cryogenic fuels and using only one fuel tank
What (the heck) is a Super Worm Equinox Moon?
Mimic lecturing on blackboard, facing audience
When were female captains banned from Starfleet?
How much theory knowledge is actually used while playing?
Does the Linux kernel need a file system to run?
Has any country ever had 2 former presidents in jail simultaneously?
I found an audio circuit and I built it just fine, but I find it a bit too quiet. How do I amplify the output so that it is a bit louder?
What is the English pronunciation of "pain au chocolat"?
Why does Carol not get rid of the Kree symbol on her suit when she changes its colours?
What does Apple's new App Store requirement mean
Taxes on Dividends in a Roth IRA
How would you translate "more" for use as an interface button?
C++ check if statement can be evaluated constexpr
Is this toilet slogan correct usage of the English language?
Are cause and effect the same as in our Universe in a non-relativistic, Newtonian Universe in which the speed of light is infinite?
Has the laser at Magurele, Romania reached a tenth of the Sun's power?
awk assign to multiple variables at once
How to explain what's wrong with this application of the chain rule?
How do you make your own symbol when Detexify fails?
Can you use Vicious Mockery to win an argument or gain favours?
How to preserve electronics (computers, iPads and phones) for hundreds of years
Doesn't the system of the Supreme Court oppose justice?
Change the color of a single dot in `ddot` symbol
Custom functional interface as method argument
How does a method “reference to an instance method of an arbitrary object of a particular type” resolve the arbitrary object?Sort ArrayList of custom Objects by propertyCompile all files in src?Clone a single tone objectMethod override returns nullExecutorService workStealingPool and cancel methodJava - Method executed prior to Default ConstructorWhen use java regular-expression pattern.matcher(), source does not match regex.But, my hope result is ,source matches regexabstract class using its own abstract methodWould it make any difference giving arguments using scanner class instead of command line arguments?java exception - why does it catch?
I have the code below that does produce expected result. Could somebody explain what's happening behind the curtains? I don't understand how does the compiler/JVM knows that it's needed to invoke store(String str) on the Storer object or how does it define the doSomething(Storer s, String str) implementation.
Storer.java
public class Storer
private List<String> storer = new ArrayList<>();
public void store(String str)
storer.add(str);
@Override
public String toString()
return "Storer [storer=" + storer + "]";
MyInterface.java
@FunctionalInterface
public interface MyInterface
public abstract void doSomething(Storer s, String str);
Executor.java
public class Executor
public void doStore(Storer storer, String s, MyInterface p)
p.doSomething(storer, s);
TestFunctionalInterfaces.java
public class TestFunctionalInterfaces
public static void main(String[] args)
Storer storer = new Storer();
Executor test = new Executor();
test.doStore(storer, "I've got added", Storer::store);
System.out.println(storer);
An output is:
Storer [storer=[I've got added]]
Thanks in advance.
java functional-interface
add a comment |
I have the code below that does produce expected result. Could somebody explain what's happening behind the curtains? I don't understand how does the compiler/JVM knows that it's needed to invoke store(String str) on the Storer object or how does it define the doSomething(Storer s, String str) implementation.
Storer.java
public class Storer
private List<String> storer = new ArrayList<>();
public void store(String str)
storer.add(str);
@Override
public String toString()
return "Storer [storer=" + storer + "]";
MyInterface.java
@FunctionalInterface
public interface MyInterface
public abstract void doSomething(Storer s, String str);
Executor.java
public class Executor
public void doStore(Storer storer, String s, MyInterface p)
p.doSomething(storer, s);
TestFunctionalInterfaces.java
public class TestFunctionalInterfaces
public static void main(String[] args)
Storer storer = new Storer();
Executor test = new Executor();
test.doStore(storer, "I've got added", Storer::store);
System.out.println(storer);
An output is:
Storer [storer=[I've got added]]
Thanks in advance.
java functional-interface
add a comment |
I have the code below that does produce expected result. Could somebody explain what's happening behind the curtains? I don't understand how does the compiler/JVM knows that it's needed to invoke store(String str) on the Storer object or how does it define the doSomething(Storer s, String str) implementation.
Storer.java
public class Storer
private List<String> storer = new ArrayList<>();
public void store(String str)
storer.add(str);
@Override
public String toString()
return "Storer [storer=" + storer + "]";
MyInterface.java
@FunctionalInterface
public interface MyInterface
public abstract void doSomething(Storer s, String str);
Executor.java
public class Executor
public void doStore(Storer storer, String s, MyInterface p)
p.doSomething(storer, s);
TestFunctionalInterfaces.java
public class TestFunctionalInterfaces
public static void main(String[] args)
Storer storer = new Storer();
Executor test = new Executor();
test.doStore(storer, "I've got added", Storer::store);
System.out.println(storer);
An output is:
Storer [storer=[I've got added]]
Thanks in advance.
java functional-interface
I have the code below that does produce expected result. Could somebody explain what's happening behind the curtains? I don't understand how does the compiler/JVM knows that it's needed to invoke store(String str) on the Storer object or how does it define the doSomething(Storer s, String str) implementation.
Storer.java
public class Storer
private List<String> storer = new ArrayList<>();
public void store(String str)
storer.add(str);
@Override
public String toString()
return "Storer [storer=" + storer + "]";
MyInterface.java
@FunctionalInterface
public interface MyInterface
public abstract void doSomething(Storer s, String str);
Executor.java
public class Executor
public void doStore(Storer storer, String s, MyInterface p)
p.doSomething(storer, s);
TestFunctionalInterfaces.java
public class TestFunctionalInterfaces
public static void main(String[] args)
Storer storer = new Storer();
Executor test = new Executor();
test.doStore(storer, "I've got added", Storer::store);
System.out.println(storer);
An output is:
Storer [storer=[I've got added]]
Thanks in advance.
java functional-interface
java functional-interface
asked Mar 7 at 23:45
AntonAnton
224
224
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
The method reference Store::storer
is equivalent to the lambda (s, str) -> s.store(str)
. In general, given a functional interface that expects args a1, a2, a3, ..., a method reference of this type is equivalent to a lambda that calls a1.namedMethod(a2, a3, ...). See this answer.
add a comment |
Storer::store
is a method reference which can be used in place of any @FunctionalInterface
s. What you've got here is essentially a shorthand of an implementation of My Interface. The equivalent being :
public class MyInterfaceImpl implements MyInterface
public void doSomething(Storer storer, String str)
storer.store(str);
This implementation (specified through your method reference) is why storer.store() is executed... because of the implementation of MyInterface you've specified, and passed to, your Executor. The compiler is smart enough to match the implemention/method reference to the arguments you supplied
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%2f55054611%2fcustom-functional-interface-as-method-argument%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
The method reference Store::storer
is equivalent to the lambda (s, str) -> s.store(str)
. In general, given a functional interface that expects args a1, a2, a3, ..., a method reference of this type is equivalent to a lambda that calls a1.namedMethod(a2, a3, ...). See this answer.
add a comment |
The method reference Store::storer
is equivalent to the lambda (s, str) -> s.store(str)
. In general, given a functional interface that expects args a1, a2, a3, ..., a method reference of this type is equivalent to a lambda that calls a1.namedMethod(a2, a3, ...). See this answer.
add a comment |
The method reference Store::storer
is equivalent to the lambda (s, str) -> s.store(str)
. In general, given a functional interface that expects args a1, a2, a3, ..., a method reference of this type is equivalent to a lambda that calls a1.namedMethod(a2, a3, ...). See this answer.
The method reference Store::storer
is equivalent to the lambda (s, str) -> s.store(str)
. In general, given a functional interface that expects args a1, a2, a3, ..., a method reference of this type is equivalent to a lambda that calls a1.namedMethod(a2, a3, ...). See this answer.
answered Mar 8 at 0:11
MathiasMathias
511
511
add a comment |
add a comment |
Storer::store
is a method reference which can be used in place of any @FunctionalInterface
s. What you've got here is essentially a shorthand of an implementation of My Interface. The equivalent being :
public class MyInterfaceImpl implements MyInterface
public void doSomething(Storer storer, String str)
storer.store(str);
This implementation (specified through your method reference) is why storer.store() is executed... because of the implementation of MyInterface you've specified, and passed to, your Executor. The compiler is smart enough to match the implemention/method reference to the arguments you supplied
add a comment |
Storer::store
is a method reference which can be used in place of any @FunctionalInterface
s. What you've got here is essentially a shorthand of an implementation of My Interface. The equivalent being :
public class MyInterfaceImpl implements MyInterface
public void doSomething(Storer storer, String str)
storer.store(str);
This implementation (specified through your method reference) is why storer.store() is executed... because of the implementation of MyInterface you've specified, and passed to, your Executor. The compiler is smart enough to match the implemention/method reference to the arguments you supplied
add a comment |
Storer::store
is a method reference which can be used in place of any @FunctionalInterface
s. What you've got here is essentially a shorthand of an implementation of My Interface. The equivalent being :
public class MyInterfaceImpl implements MyInterface
public void doSomething(Storer storer, String str)
storer.store(str);
This implementation (specified through your method reference) is why storer.store() is executed... because of the implementation of MyInterface you've specified, and passed to, your Executor. The compiler is smart enough to match the implemention/method reference to the arguments you supplied
Storer::store
is a method reference which can be used in place of any @FunctionalInterface
s. What you've got here is essentially a shorthand of an implementation of My Interface. The equivalent being :
public class MyInterfaceImpl implements MyInterface
public void doSomething(Storer storer, String str)
storer.store(str);
This implementation (specified through your method reference) is why storer.store() is executed... because of the implementation of MyInterface you've specified, and passed to, your Executor. The compiler is smart enough to match the implemention/method reference to the arguments you supplied
answered Mar 7 at 23:53
tomgeraghty3tomgeraghty3
43128
43128
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.
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%2f55054611%2fcustom-functional-interface-as-method-argument%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