java - 如何在Java中创建一个同时接受String []和Integer []的方法而无需方法重载?

Posted

技术标签:

【中文标题】java - 如何在Java中创建一个同时接受String []和Integer []的方法而无需方法重载?【英文标题】:how do i create a Method that accepts both String[] and Integer[] in java without method overloading? 【发布时间】:2016-01-16 22:10:00 【问题描述】:

假设您有一个整数数组和一个字符串数组。如何编写一个可以打印两个数组的所有元素的 SINGLE 方法 printArray。该方法应该能够接受整数数组或字符串数​​组。注意.. 我不能使用方法重载。知道如何解决这个问题吗?

【问题讨论】:

你不能不传递Object[]吗? 在这种情况下,您应该始终使用重载方法,而不是在单个方法中传递多种类型的变量 谢谢,我不知道!谢谢帕特里克 是的,我希望我能做到。但我只是在练习一些问题,我遇到了这个问题,它说你不能使用方法重载 【参考方案1】:

我看到的唯一方式是

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));

【讨论】:

非常感谢!我希望我也可以使用 2 种方法,但它明确表示我不能使用超过 1 种方法,而且我不能使用方法重载!还是谢谢!【参考方案2】:

你应该写一个泛型方法

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());
    

当您调用该方法时,您只需执行printArray(arrayOfIntegers) 其中arrayOfIntegers

Integer[] arrayOfIntegers;

【讨论】:

哇,完全相同的答案同时出现!太可怕了:P【参考方案3】:

你可以使用泛型:

public <T> void printArray(T[] array)

    for(T elem : array) System.out.println(elem);

你可以这样称呼它:

printArray(new Integer[]  1, 2, 3 );
printArray(new String[]  "Hello", "World" );

【讨论】:

【参考方案4】:

您也可以使用这样的基于 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);
 

【讨论】:

【参考方案5】:

你可以这样做!

class Printer

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

【讨论】:

【参考方案6】:

您可以将 ArrayList 与 Object 一起使用

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));  
            
        
    

【讨论】:

以上是关于java - 如何在Java中创建一个同时接受String []和Integer []的方法而无需方法重载?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中创建内存泄漏?

如何在 Java 中创建内存泄漏?

如何在 Java 中创建内存泄漏?

如何在 Java 中创建一些变量类型别名

如何在 Java 中创建一个泛型数组?

Java在Interface中创建方法并更改参数类型