Java简单泛型

use*_*414 2 java templates

如何使用C++ tempates之类的东西替换这两个函数?

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();
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

基本上你不能.Java泛型不适用于基本类型.你可以用反射来做,但它会很难看.你也可以使用盒装类型,如下所示:

public <T> void verify(T[] array, T value) {
   if (!Arrays.asList(array).contains(value)) {
       abortOperation();
   }
}
Run Code Online (Sandbox Code Playgroud)

...但是,这只会为工作Integer[]Double[],不int[]double[].

这就是为什么Arrays类对于像binarySearch...这样的方法有如此多的重载的原因,如果你的方法可以是通用的,那么那些方法也可以.

从根本上说,泛型是一样的C++模板.它们涵盖了很多相同的用例,但它们并不相同,你不应该惊讶地看到一些区域被一个区域覆盖而另一个区域覆盖.

  • @PeterLawrey:是的,因此"你可以用反射来做到这一点":) (3认同)