Java 8:Lambda 函数和通用通配符

2024-01-07

我有以下课程

class Book implement Borrowable  {
    @Override
    public String toString(Function<? extends Borrowable
                            , String> format) {
          return format.apply(this);    
    }
}

这给了我一个错误,我无法在此(书籍对象)上使用“应用”。

我当前的格式化程序是

 Function<Book, String> REGULAR_FORMAT = book -> "name='" + book.name + '\'' +
        ", author='" + book.author + '\'' +
        ", year=" + book.year;

我不想制作该类型的 lambda 函数

Function<Borrowable, String>

因为我将无法访问未由 Borrowable 公开的 Book 成员。


The Function<? extends Borrowable, String>type 表示能够接受的函数some延伸的类型Borrowable。这并不意味着它接受Book。也许最好的解决方案是引入通用参数Borrowable:

public interface Borrowable<T> {
    public String toString(Function<? super T, String> format);
}

并指定它在Book:

public class Book implements Borrowable<Book> {
    @Override
    public String toString(Function<? super Book, String> format) {
        return format.apply(this);
    }
}

这类似于Comparable界面有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8:Lambda 函数和通用通配符 的相关文章

随机推荐