Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中创建一个既接受String[]又接受Integer[]的方法,而无需方法重载?_Java_Arrays_String_Methods_Integer - Fatal编程技术网

如何在java中创建一个既接受String[]又接受Integer[]的方法,而无需方法重载?

如何在java中创建一个既接受String[]又接受Integer[]的方法,而无需方法重载?,java,arrays,string,methods,integer,Java,Arrays,String,Methods,Integer,假设有一个整数数组和一个字符串数组。如何编写一个方法printArray来打印两个数组的所有元素。该方法应该能够接受整数数组或字符串数组。注。。我不能使用方法重载。你知道怎么做吗?我认为唯一的办法是 public void print(Object o) { if (o instanceof String[]) { System.out.println(Arrays.toString((String[]) o)); } else if (o instanc

假设有一个整数数组和一个字符串数组。如何编写一个方法printArray来打印两个数组的所有元素。该方法应该能够接受整数数组或字符串数组。注。。我不能使用方法重载。你知道怎么做吗?

我认为唯一的办法是

public void print(Object o) {
    if (o instanceof String[]) {
        System.out.println(Arrays.toString((String[]) o));
    }
    else if (o instanceof int[]) {
        System.out.println(Arrays.toString((int[]) o));
    }
}
但它绝对丑陋。你应该有两种不同的方法

如果您拥有的是一个
Integer[]
(而不是
int[]
),那么它就更简单,而且还可以:

public void print(Object[] o) {
    System.out.println(Arrays.toString(o));
}

您应该编写一个泛型方法

public <T> void printArray(T[] array) {
    //do your printing stuff here; something like this will work
    for ( T elem : array ) {
        System.out.println(elem.toString());
    }
}
您可以使用泛型:

public <T> void printArray(T[] array)
{
    for(T elem : array) System.out.println(elem);
}

您也可以有这样一个基于java-8的解决方案- printAnyArray()是必需的方法

public class ArrayPrinter{
  public static void main(String args[]){
    String strArray[]={"a","b"};
    Integer intArray[]={1,2};
    printAnyArray(strArray);
    printAnyArray(intArray);
}

 public static void printAnyArray(Object[] objectArray){
  Arrays.asList(objectArray).forEach(System.out::println);
 }
}
你可以这样做

class Printer
{
   public <inputType> void printArray(inputType[] array) 
   {
        for (inputType elem: array) 
        {
            System.out.println(elem);
    }
 }
}
类打印机
{
公共void打印数组(inputType[]数组)
{
for(inputType元素:数组)
{
系统输出打印项次(elem);
}
}
}

您可以将ArrayList与对象一起使用

import java.util.ArrayList;
    class Printer {
        public void printArray(Object[] a) {
            ArrayList<Object> al = new ArrayList<>();
            for (int i = 0; i < a.length; i++) {
                al.add(a[i]);
            }
            for (int i = 0; i < al.size(); i++) {
                System.out.println(al.get(i));  
            }
        }
    }
import java.util.ArrayList;
类打印机{
公共void打印数组(对象[]a){
ArrayList al=新的ArrayList();
for(int i=0;i
您不能改为传入一个
对象[]
吗?在这种情况下,您应该始终使用重载方法,而不是在一个方法中传递多种类型的变量。谢谢,我不知道!谢谢Patrichyeah我希望我能做到。但我只是在练习一些问题,我遇到了这个问题,它说你不能经常使用方法重载!我希望我也能使用2个方法,但它明确地说我不能使用超过1个方法,我不能使用方法重载!无论如何谢谢你!哇,在同一时间给出了完全相同的答案!那太可怕了:P
class Printer
{
   public <inputType> void printArray(inputType[] array) 
   {
        for (inputType elem: array) 
        {
            System.out.println(elem);
    }
 }
}
import java.util.ArrayList;
    class Printer {
        public void printArray(Object[] a) {
            ArrayList<Object> al = new ArrayList<>();
            for (int i = 0; i < a.length; i++) {
                al.add(a[i]);
            }
            for (int i = 0; i < al.size(); i++) {
                System.out.println(al.get(i));  
            }
        }
    }