如何使用不同的参数类型调用一个函数

时间:2014-07-20 11:22:25

标签: java

下面的方法可以用于double,float和integer吗?换句话说,当我发送indexRange(10.0)时,下面的函数将得到并使用10.0作为double而不是int。在C ++中,有概念模板,但我可以用模板做这个愿望但是用Java,我不知道。

private int[] indexRange(int idx_max, int size) {

}

5 个答案:

答案 0 :(得分:1)

在泛型上有java中的通配符的概念。对于这类问题,你可以使用它。泛型提供了编译时的安全性。

private <? extends Number> indexRange(<? extends Number> idx_max, <? extends Number> size) 
{
}

它只需要数字(int,double,float)作为参数。

答案 1 :(得分:0)

你可以重载功能

private int t(int d, int s) {
    return 0;
}

private int t(double d, double s) {
    return 0;
}

答案 2 :(得分:0)

您可以使用Generic Methods在Java中实现相同的功能。

您可以编写一个可以使用不同类型的参数调用的通用方法声明。根据传递给泛型方法的参数类型,编译器会适当地处理每个方法调用。以下是定义通用方法的规则:

所有泛型方法声明都有一个由尖括号(&lt;和&gt;)分隔的类型参数部分,它位于方法的返回类型之前(&lt; E&gt;在下一个示例中)。

每个类型参数部分包含一个或多个以逗号分隔的类型参数。类型参数(也称为类型变量)是指定泛型类型名称的标识符。

类型参数可用于声明返回类型,并充当传递给泛型方法的参数类型的占位符,这些参数称为实际类型参数。

通用方法体的声明与任何其他方法一样。请注意,类型参数只能表示引用类型,而不是基本类型(如int,double和char)。

public class GenericMethodTest
{
// generic method printArray                         
public static < E > void printArray( E[] inputArray )
{
  // Display array elements              
     for ( E element : inputArray ){        
        System.out.printf( "%s ", element );
     }
     System.out.println();
}

public static void main( String args[] )
{
    // Create arrays of Integer, Double and Character
    Integer[] intArray = { 1, 2, 3, 4, 5 };
    Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
    Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

    System.out.println( "Array integerArray contains:" );
    printArray( intArray  ); // pass an Integer array

    System.out.println( "\nArray doubleArray contains:" );
    printArray( doubleArray ); // pass a Double array

    System.out.println( "\nArray characterArray contains:" );
    printArray( charArray ); // pass a Character array
} 
}

 //    Everything taken from TutorialsPoint.com!

答案 3 :(得分:0)

您可以使用Java中的Generic来实现它

阅读Why Use Generics?,它将为您提供此问题的答案。

查找更多Tutorial

示例代码:

class MyRangeProgram<T> {
    private T[] indexRange(T idx_max, T size) {
        ...
    }
}

new MyRangeProgram<Integer>();
new MyRangeProgram<Double>();

答案 4 :(得分:-1)

您可以使用以下内容:

private int[] indexRange(Number idx_max, Number size) {
   // your code goes here.
}

基元double,float,int分别对应DoubleFloatInteger包装类。这些类从Number类延伸。因此,您的原始参数将首先被自动装箱,然后它们将被处理为数字实例。