Aquí está mi ejemplo de interfaz
public interface Card { String name(); }Lo uso en ArrayList y creo objetos como este.
public static void main(String[] args) { List<Card> cards = new ArrayList<>(); cards.add(() -> "2"); cards.add(() -> "4"); System.out.println(cards); }¿Cómo puedo imprimir un número en la consola si creo un objeto como este? Aquí está el ejemplo del texto impreso.
[d$$Lambda$14/0x0000000800bb1438@2d98a335]Pero quiero que se impriman 2 y 4.
Prueba esto.
public interface Card { String name(); static Card of(Supplier<String> supplier) { return new Card() { @Override public String name() { return supplier.get(); } @Override public String toString() { return name(); } }; } } public static void main(String[] args) { List<Card> cards = new ArrayList<>(); cards.add(Card.of(() -> "2")); cards.add(Card.of(() -> "4")); System.out.println(cards); }producción:
[2, 4] Nota: no puede anular el método toString() .
public interface Card { String name(); public default String toString() { // compile error // "A default method cannot override a method from java.lang.Object " return name(); } }