@FunctionalInterface
interface StringConsumer extends Consumer<String> {
@Override
public default void accept(String s) {
System.out.println(s.toUpperCase());
}
void print(String s);
}
public class Test {
public static void main(String[] args) {
StringConsumer stringConsumerImpl= s -> System.out.println(s.toLowerCase());
List<String> list = Arrays.asList("Dr", "Mr", "Miss", "Mrs");
list.forEach(stringConsumerImpl);
}
}
Saída: DR MR MISS MRS
Então o que está acontecendo neste código é realmente estranho para mim. Na verdade, estou fornecendo a implementação do método print, mas quando executo o código, ele na verdade usa a implementação do método default.
Eu esperava que a implementação de impressão funcionasse. Editar: quando o método de impressão é excluído do StringConsumer, ele causa um erro de compilação no método principal