下面的方法可以用于double,float和integer吗?换句话说,当我发送indexRange(10.0)时,下面的函数将得到并使用10.0作为double而不是int。在C ++中,有概念模板,但我可以用模板做这个愿望但是用Java,我不知道。
private int[] indexRange(int idx_max, int size) {
}
答案 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分别对应Double
,Float
和Integer
包装类。这些类从Number
类延伸。因此,您的原始参数将首先被自动装箱,然后它们将被处理为数字实例。