java - java函数如何通过模板或其他方式采用各种参数类型?
问题描述
我尝试实现一个适应不同Buffer类型的函数,例如ByteBuffer,IntBuffer,FloatBuffer等。伪代码如下所示
<T1, T2> boolean compareBuffer(T1 buf1, T1 buf2) {
if(buf1.capacity() != buf2.capacity()) {
return false;
}
for(int i = 0; i < buf1.capacity(); i++) {
T2 v1 = buf1.get(i);
T2 v2 = buf2.get(i);
if(v1 != v2) {
return false;
}
}
return true;
}
编译器报告错误。我怎样才能以简单的方式做到这一点?
解决方案
您需要了解Java 中的类型擦除。
在您的情况下,编译器没有关于类型 T1 和 T2 的信息,除了它们必须是 Object 的后代,因为所有引用类型都是。因此,您只能在 compareBuffer 的主体中使用 Object 的属性和方法。
您似乎希望 T1 和 T2 实现 Buffer 接口。因此声明:
<T1 extends Buffer, T2 extends Buffer> boolean compareBuffer(T1 buf1, T1 buf2)
现在可以使用 Buffer 的属性和方法了。
推荐阅读
- c# - blazor 中的动态延迟加载
- python - ValueError 时的 Selenium 重试 URL
- interface - 如何访问内核驱动程序函数
- voip - 如何向当前使用过时编解码器的现有 VoIP 软件添加新的改进编解码器库(比如 AV1 的 libaom)
- angular - 是否可以更改谷歌地图自动完成对象绑定到的输入元素?
- opencv - 难以找到可靠的注视估计方法
- reactjs - 将不同的环境变量传递给 React 应用程序而不需要重新构建
- php - Laravel:组合框在编辑条目(Crud)中显示来自数据库的信息
- reactjs - 离子反应控制器(使用控制器时的框架委托问题)
- python - 在 python 中通过 Internet 流式传输/处理视频