Java 简单泛型

标签 java templates

如何使用 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/

相关文章:

java - 方法的空指针异常

java - 如何显示在 pgAdmin3 中使用 Hibernate 插入的文本值?

c++ - 模板循环需要 const 值

c++ - friend 模板定义。何时何地包含 <T>?

c++ - 在 C++11 的 lambda 中使用封闭函数中的模板类型可以吗?

c++ - 看不懂C++11模板函数参数推导

java - android或java的条形码生成算法

java - 线程数组的最佳实践 (java)

Java 动态数组

c++ - 将(部分)模板化模板函数作为 std::function(或函数指针)传递