【问题标题】:How to print out an object if it's created with lambda?如果它是用 lambda 创建的,如何打印出一个对象?
【发布时间】:2022-01-07 21:37:40
【问题描述】:

这是我的界面示例

public interface Card {
    String name();
}

我在 ArrayList 中使用它并创建这样的对象。

public static void main(String[] args) {
    List<Card> cards = new ArrayList<>();
    cards.add(() -> "2");
  cards.add(() -> "4");
    System.out.println(cards);
}

如果我创建这样的对象,如何将数字打印到控制台? 这是打印文本的示例。

[d$$Lambda$14/0x0000000800bb1438@2d98a335]

但我想打印出 2 和 4。

【问题讨论】:

标签: java


【解决方案1】:

试试这个。

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);
}

输出:

[2, 4]

注意:您不能覆盖 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();
    }
}

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多