如何使方法在java中接受不同的参数数据类型?

时间:2016-10-27 17:14:30

标签: java

我在this问题中找到了以下代码。它到目前为止工作得很好,但我遇到了改组字符串数组的需要。下面的代码只接受int数组作为参数。我仍然是java的新手,我似乎无法弄清楚如何让方法接受它的参数中的多个数据类型。如果我可以使用相同的方法来改组整数的数组和字符串数组,那将是非常好的。有人可以帮忙吗?

static int[] shuffle(int[] ar) {
    // If running on Java 6 or older, use `new Random()` on RHS here
    Random rnd = ThreadLocalRandom.current();
    for (int i = ar.length - 1; i > 0; i--)
    {
        int index = rnd.nextInt(i + 1);
        // Simple swap
        int a = ar[index];
        ar[index] = ar[i];
        ar[i] = a;
    }
    return ar;
}

6 个答案:

答案 0 :(得分:2)

对于不同的参数,您应该有不同的方法。这将是方法重载。

在你的情况下(对于字符串和int)

static int[] shuffle(int[] array)
static String[] shuffle(String[] array)

或者您可以在方法的参数中包含Object数组。这样你就必须在调用方法中将int数组定义为Integer类数组。

static Object[] shuffle(Object[] array)

Object是Java和子类中所有类的超类。对象可以由超类'处理。参考

由于int是基本类型,而不是类,因此必须将int数组定义为Integer数组。 Integer是int的类型包装类。

答案 1 :(得分:1)

您可以使用两种不同的方法。一个调整int数组和一个shuffles字符串数组。

static String[] shuffleStringArray(String[] ar){
    //method logic goes here
}

你的方法的基本结构不应该改变太多。

祝你好运!

答案 2 :(得分:0)

Java通过使数组变形来解决这个问题。这意味着如果B是A的子类型,则B []是A []的子类型。这意味着您可以创建参数类型int,并且可以传入任何对象数组。对于像<form:form modelAttribute="analysisForm" action="analize" method="post" id="analysisForm"> <label for="sampling"><spring:message code='analysis.sampling' /></label> <input type="text" id="sampling" name="sampling" /> <br /> <c:forEach items="${analysisTypes}" var="type"> <label for="${type.key.name}"><spring:message code='${type.key.message}' /></label> <input type="checkbox" id="${type.key.name}" name="${type.key.name}" value="${type.value}" /> </c:forEach> </form> 这样的原始类型,你仍然需要编写一个单独的方法,因为原语不是对象。

答案 3 :(得分:0)

以这种方式使用通用数组

static <T> T[] shuffle(T[] ar){
// If running on Java 6 or older, use `new Random()` on RHS here
    Random rnd = ThreadLocalRandom.current();
    for (int i = ar.length - 1; i > 0; i--)
    {
      int index = rnd.nextInt(i + 1);
      // Simple swap
      T a = ar[index];
      ar[index] = ar[i];
      ar[i] = a;
    }
    return ar;
}

像这样调用它:

System.out.println(Arrays.toString(shuffle(new Integer[]{1,2,3,4})));

(或)

System.out.println(Arrays.toString(shuffle(new String[]{"a","b","c"})));

答案 4 :(得分:0)

你不能让一个方法对int数组和引用类型数组执行相同的操作,因为Java将它们视为完全不同的类型,以及它们共同的超类(Object)缺乏作为数组的功能。但是,您似乎在overloading处(参见重载方法部分)。您可以为不同的参数单独实现该方法。只需复制/粘贴代码,并将int的相关实例替换为String。这实际上是对Arrays.copyOf中的基本类型数组所做的。

答案 5 :(得分:0)

如果您需要同时支持对象和基元,则无法执行此操作。您需要为每个基本类型创建一个重载方法,为Object创建一个重载方法。该方法的每个版本将重新实现具有不同数据类型的相同算法。

您的方法类似于java.util.Arrays类中的方法。看看Open JDK中的Arrays.java源代码。

http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/classes/java/util/Arrays.java