3

我想创建一个打印数组内容的静态方法。我为 String[] 写了一个,如下所示

public static void print(String[] a){
    for(String x : a){
    System.out.print(x+", ");
    }
    System.out.println();
}

我想我可以创建一个接受泛型类型的方法,并修改代码如下

public class ArrayPrinting<E> {

    public static void printArray(E[] a){
        for(E x : a){
            System.out.print(x+", ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        String[] a = {"A","B","C","D","E"};


    }
}

但是,这会导致编译器错误

'不能对非静态类型 E 进行静态引用'

那么,我该如何创建这样的方法?还是不可能?由于这是一个静态方法,我想知道如何在不创建实例的情况下调用该方法。像这样的电话

ArrayPrinting<E>.printArray(a)看起来不对..

有人可以帮忙吗?

4

4 回答 4

7

试试这个

public class ArrayPrinting {

    public static <E> void printArray(E[] a){
        for(E x : a){
            System.out.print(x+", ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        String[] a = {"A","B","C","D","E"};
        ArrayPrinting.printArray(a);
    }
}
于 2013-08-24T05:54:03.873 回答
5

Ravi 已经介绍了泛型方法的正确语法。我只想指出,这个特定的方法不需要是通用的:

public static void printArray(Object[] a) {
    for (Object x : a) {
        System.out.print(x + ", ");
    }
    System.out.println();
}

这个工作的原因是数组协方差- aString[]是一个Object[].

于 2013-08-24T05:56:59.903 回答
1

类的泛型类型参数用于类级别的变量和方法(实例变量和方法)。所以你不能使用它。

您可以通过在方法本身中声明类型参数来处理它:

  public static <E> void printArray(E[] a){
     .............
 }
于 2013-08-24T06:02:50.437 回答
-3
public class ArrayPrinting<E> {

    public  void printArray(E[] a){
        for(E x : a){
            System.out.print(x+", ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
          String[] a = {"A","B","C","D","E"};
          new ArrayPrinting().printArray(a);
    }
}
于 2013-08-24T05:57:52.730 回答