作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 C++ 模板之类的函数替换这 2 个函数?
public void verify(final int[] array, final int v) {
for ( final int e : array ) if ( e == v || v == e ) return;
abort_operation();
}
public void verify(final double[] array, final double v) {
for ( final double e : array ) if ( e == v || v == e ) return;
abort_operation();
}
最佳答案
基本上,你不能。 Java 泛型不适用于原始类型。您可以通过反射(reflection)来做到这一点,但这会很丑陋。您也可以使用 boxed 类型来实现,如下所示:
public <T> void verify(T[] array, T value) {
if (!Arrays.asList(array).contains(value)) {
abortOperation();
}
}
...但这只适用于 Integer[]
和 Double[]
,不适用于 int[]
和 double []
.
这就是为什么 Arrays
类对 binarySearch
等方法有如此多的重载...如果您的方法可以通用,那么这些方法也可以。
从根本上说,泛型与 C++ 模板不同。它们涵盖了很多相同的用例,但它们并不相同,看到其中一个涵盖某些领域而另一个不涵盖您应该不会感到惊讶。
关于Java 简单泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564810/
我是一名优秀的程序员,十分优秀!