Java:将参数传递给有界参数函数

时间:2019-07-15 22:52:06

标签: java bounded-types

在Java中,我正在研究一个函数以返回数组中的最大值。我正在编写它,以便它不在乎使用有界参数的参数类型(我认为)。在检测功能签名时,主功能出现错误。

我遵循了在各个教程页面中看到的内容,似乎并没有表明该呼叫会出现任何问题。

public static <N extends Number> N getMax (N [] numberArray){
  N value = numberArray [0];
  for (int i = 0; i < numberArray.length; i++){
    if((double) numberArray[i] > (double)  value)
      value = numberArray[i]; 
  }
  return value;
}
public static void main (String [] args ){
  double[] array = {1,2,3,1,-10,2};
  System.out.println(getMax(array));
}

编辑:对该问题进行了一些澄清。我这样做是作为分配的一部分,在该分配中,我需要编写一个返回数组最大值的函数。基于此,我假设我不能指望任何特定的输入,并且主要功能只是演示该问题。

2 个答案:

答案 0 :(得分:1)

您已指定一个原始数组(double[]),将其传递给Number[]时不能将其推断为getMax。一种简单的解决方案是改用Double[],因为Double扩展了Number

public static void main (String[] args) {
    Double[] array = {1D, 2D, 3D, 1D, -10D, 2D};
    System.out.println(getMax(array));
}

输出:

3.0

答案 1 :(得分:0)

您可以使用convert an array of primitives to an array of containers类的方法轻松地ArrayUtils,该类位于单独的但通用的库中。这将使您可以轻松地将任何原始数字类型(<!DOCTYPE html> <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'> <head> <meta charset='UTF-8' /><meta name='viewport' content='width=device-width, height=device-height, initial-scale:1' /> <title>Test Template</title> <link type='text/css' rel='stylesheet' href='css/external.css' /> <script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script> <script type='text/javascript' src='js/external.js'></script> </head> <body> <div id='content'> <input id='check_all' type='checkbox' checked='checked' /><label for='check_all'>All</label> <input class='indi' id='check_one' type='checkbox' checked='checked' /><label for='check_one'>One</label> <input class='indi' id='check_two' type='checkbox' checked='checked' /><label for='check_two'>Two</label> <input class='indi' id='check_three' type='checkbox' checked='checked' /><label for='check_three'>Three</label> <table id='output_table'> <tbody> <tr> <th>1</th><td>one</td> </tr> <tr> <th>2</th><td>two</td> </tr> <tr> <th>3</th><td>three</td> </tr> </tbody> </table> </div> </body> </html>int等)的数组传递给您的方法。

float

在我们使用它的同时,public static void main (String [] args ){ double[] array = {1,2,3,1,-10,2}; System.out.println(getMax(ArrayUtils.toObject(array))); } 有一个方法Number,它将方法强制转换隐藏在其具体实现中:

doubleValue()