2017-03-17 81 views
2

我的意思是这样的:如何在Java中创建一个可用多种类型调用的函数?

function f(int a) { 

} 
function f(double a) { 

} 
function f(string a) { 

} 

我想要一个可以使用相同的名称(f)和相同的变量的名称(a)被调用的函数,但不是同一个类型(intdouble等)

谢谢!

+0

这就是你所说的重载方法。 – msagala25

+0

你不要用关键字'function'在Java中声明函数。如果这意味着返回类型,那么类型名称应遵循Java命名约定。在Java中称为“方法”的函数必须是一个类型的成员,您不会显示。除此之外,你可以通过做你所做的事来做你想做的事情,声明在不同类型上运行的函数版本。 –

+0

函数声明中的变量名称是占位符,由函数在内部使用,但对其客户端没有任何命名要求。 –

回答

5

你要找的仿制药:

实例方法:

public <T> void f(T a) { // T can be any type 
    System.out.println(a); // test to see `a` is printed 
    // Do something.. 
} 

类方法:

public static <T> void f(T a) { // T can be any type 
    System.out.println(a); // test to see `a` is printed 
    // Do something.. 
} 

假设这是您的main方法里面,你可以调用类的方法是这样的:

实施例1:

int number = 10; 
f(number); 

实施例2:

String str = "hello world"; 
f(str); 

实施例3:

char myChar = 'H'; 
f(myChar); 

实施例4:

double floatNumber = 10.00; 
f(floatNumber); 

和任何其他类型。

深入阅读Generics

Java Documentation of Generics

+1

他们可能正在寻找仿制药。或者他们可能在寻找重载。或者他们可能正在寻找函数引用。或者他们可能正在寻找lambdas,这将涉及泛型,但对于已经在Java API中的Interfaces。 –

+0

@LewBloch我当然同意你的意见,但我不可能向他建议所有可能的想法。这个答案似乎是我在问问题时想到的。不过谢谢。 –

+0

@LewBloch此外,如果您有任何建议可以更好地回答问题,请随时编辑,如果我觉得合适,我会接受。 –

3

Java类可以有同名的方法,但不同的参数类型,就像你问的。

public class Foo { 

    public void f(int a){ 
     System.out.println(a); 
    } 

    public void f(double a){ 
     System.out.println(a); 
    } 

    public void f(String a){ 
     System.out.println(a); 
    } 

    public static void main(String[] args) throws InterruptedException{ 
     Foo f = new Foo(); 
     f.f(9.0); 
     f.f(3); 
     f.f("Hello world!"); 
    } 

} 
相关问题