Abr*_*iel 8 java lambda java-8
我有以下课程
class Book implement Borrowable {
@Override
public String toString(Function<? extends Borrowable
, String> format) {
return format.apply(this);
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,我无法在此(Book对象)上使用"apply".
我目前的格式化程序是
Function<Book, String> REGULAR_FORMAT = book -> "name='" + book.name + '\'' +
", author='" + book.author + '\'' +
", year=" + book.year;
Run Code Online (Sandbox Code Playgroud)
我不想制作该类型的lambda函数
Function<Borrowable, String>
Run Code Online (Sandbox Code Playgroud)
因为我将无法访问未被Borrowable公开的Book成员.
该Function<? extends Borrowable, String>型手段的功能能够接受某种类型的延伸Borrowable.这并不意味着它接受Book.可能最好的解决方案是引入通用参数Borrowable:
public interface Borrowable<T> {
public String toString(Function<? super T, String> format);
}
Run Code Online (Sandbox Code Playgroud)
并在Book以下位置指定:
public class Book implements Borrowable<Book> {
@Override
public String toString(Function<? super Book, String> format) {
return format.apply(this);
}
}
Run Code Online (Sandbox Code Playgroud)
它类似于Comparable界面的工作方式.
您可能正在寻找Function<? super Book, String>.
AFunction<Book, String>是有效的Function<? extends Borrowable, String>,但 a 也是有效的Function<DVD, String>。您的方法 ( toString) 可能会使用 a 进行调用Function<DVD, String>,但您无法传递this给该方法,因为this它不是 a DVD!
Function<? super Book, String>也许将参数类型更改为。
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |