2015-04-20 419 views
3

我写一个Java函数,其采用两个参数:一个string类型和其他可以是array of String, Integer, Float, Double, Boolean或只是一个String传递整型或字符串数​​组作为参数在Java

在JavaScript中,很容易将任何数据作为参数传递,但java中有什么好的解决方案?

+3

使用[泛型]的威力(https://docs.oracle.com/javase/tutorial/java/generics/) – halex

+4

这是很糟糕的面向对象的设计,它有处理多种数据类型的方法。你打算如何处理数据?您可以考虑您感兴趣的属性并将Interface作为参数传递给您。 – Nikolai

+1

我们需要看到更多的代码才能给出好的建议。通常情况下,你可以避免这样做。没有更多的上下文,我会说看看“方法重载”(像System.out.println这样做)。但是,再次,没有更多的背景,任何建议只是在黑暗中的危险镜头。 – Thilo

回答

1

您可以重载该方法以接受不同的参数。

void doSomething(String x, int[] y) {} 

void doSomething(String x, String[] y) {} 

void doSomething(String x, String y) {} 

这样的话,你仍然有类型安全(其中Object参数不给你)。

+0

这将如何优于泛型?考虑到Java对泛型代码使用强类型检查。 –

+0

@ b1nary.atr0phy:不确定你的意思。你会如何在这里使用泛型? – Thilo

0

我想这是你想要的

公共无效方法1(字符串str,对象... VAL)

方法体里面,你将不得不处理不同的对象相应

2

在java只能传递方法中定义的数据。解决这个问题的方法可以是使用Object作为参数。除此之外,您可以创建许多具有相同名称的方法,但接受不同的参数。 例子:

public void example(String str, Object obj){ /* code */ } 

使用时您需要确保检查它是什么类型的对象,所以你最终不会试图用一个整数作为字符串数组。

我很确定使用Object不是最好的方法,你应该使用不同参数的多个方法。

+1

这是一个非常不好的习惯,因为它违反了类型安全。 –

0

当你想要第二个对象作为任何数据类型的数组,你可以做一些事情 这样

public void _methodName(String arg1,Object[] arg2) 

由于字符串,整数,浮点数,布尔所有从java.lang.Object继承,你可以简单地通过Object[]作为第二个参数和你通过参数(字符串,诠释,....等),无论你想要的。

0

方法的原型,按您的需求如下:

public void testMethod(String strVal, Object[] genericVal) 

现在你必须要通过使用包装类对象铸造成需要的格式的正文部分。

以上实施将解决该问题。

相关问题