在java中创建一个通用的静态方法

dam*_*mon 3 java generics

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

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

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

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"};


    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会产生编译错误

'无法对非静态类型E进行静态引用

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

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

有人可以帮忙吗?

Rav*_*yal 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 而已.如果@damon需要一个泛型方法,那就是他必须声明的内容,而不是问题中的泛型类型. (2认同)

Pau*_*ora 5

Ravi已经涵盖了通用方法的正确语法.我只是想指出这个特殊的方法不需要是通用的:

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

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