java - 如何使用 Lambda 参数为 ArrayList 实现 toArray() 方法?
问题描述
我正在实施课程
class PairStringList extends ArrayList<String> {
...
@Override
public <T> T[] toArray(T[] a) {
return super.toArray(a);
}
}
我为这个类编写了测试,他们使用这样的声明:
assertArrayEquals(new String[]{}, list.toArray(String[]::new));
我看到他们使用 Lambda 作为参数。如何实现 toArray() 方法来正确运行测试?现在我有了下一个构建输出:
没有为 toArray(String[]::new) 方法找到合适的方法 Java.util.Collection.toArray(T[]) 不适用(无法推断类型变量 T(参数不匹配;数组不是功能接口))
任何想法,我该如何解决这个问题?
注意:我无法更改测试代码
谢谢大家!问题已解决。问题是测试是用 Java 11 编写的,但我使用的是 Java 8。更新到 Java 11 后,一切都可以构建和编译
解决方案
这是一种不同的toArray()
方法,你也可以通过调用来搭载它super
:
@Override
public <T> T[] toArray(IntFunction<T[]> generator) {
return super.toArray(generator);
}
甚至从 /lib/src.zip/java.base/util/Collection.java 中“窃取”默认实现:
@Override
public <T> T[] toArray(IntFunction<T[]> generator) {
return toArray(generator.apply(0));
}
事实上,即使没有实现任何东西,您的测试也可能通过,因为ArrayList<String>
超类无论如何都提供了它们。
推荐阅读
- spring-security - 如何在运行时在 OAuth2 的 SAML 之间切换(使用 Spring Security)?
- git - 然后我在本地删除了一个分支为什么这个分支仍然在github上工作
- excel - 关于 MSForms.DataObject 的运行时错误 462
- nattable - NatTable - 如何实现自定义 CopyDataToClipboardSerializer
- android - Android Compose 无法在 android studio 中预览可组合功能“渲染问题”
- batch-file - 批量删除每个用户目录中的文件
- java - PDFbox从PDF中删除颜色而不显示其背后的颜色
- android - 检测应用何时进入自由窗口模式
- amazon-cloudformation - 如何在 AWS CDK 中引用 `elasticsearch.CfnDomain` 生成的域名?
- arrays - 我的函数快速返回空数组并解析