Please consider this example:
import java.util.function.Consumer; public class Example { public static void main(String[] args) { Example example = new Example(); example.setConsumer(test -> System.out.println("passed string is " + test)); //uses MyConsumer, why ? example.getConsumer().accept("Test 1"); example.setConsumer((MyConsumer<String>)test -> System.out.println("passed string is " + test)); //uses MyConsumer example.getConsumer().accept("Test 2"); example.setConsumer((Consumer<String>)test -> System.out.println("passed string is " + test)); //uses Consumer example.getConsumer().accept("Test 3"); } private Consumer<String> consumer; public Consumer<String> getConsumer() { return consumer; } public void setConsumer(Consumer<String> consumer) { this.consumer = consumer; } public void setConsumer(MyConsumer<String> consumer) { this.consumer = consumer; } @FunctionalInterface public interface MyConsumer<T> extends Consumer<T> { @Override default void accept(T value) { System.out.println("In consumer string: " + value); //example thing to do receive(value); } void receive(T value); } }
I'm interested in the first test. Why does he use MyConsumer instead of Consumer? What if I had more different Consumers with the same lambda structure who have priority? Also, the listing I'm doing on Test 2 is marked as Redundant my IDE. This means that lamdba is first created as MyConsumer. Why is that?
I am using IntelliJ Idea with Javac.
source share