我想创建一个打印数组内容的静态方法。我为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)
看起来不对..
有人可以帮忙吗?
答案 0 :(得分: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);
}
}
答案 1 :(得分:5)
Ravi已经涵盖了generic method的正确语法。我只是想指出,这种特殊的方法并不需要通用:
public static void printArray(Object[] a) {
for (Object x : a) {
System.out.print(x + ", ");
}
System.out.println();
}
这可行的原因是array covariance - String[]
是Object[]
。
答案 2 :(得分:1)
类的泛型类型参数用于类级变量和方法(实例变量和方法)。因此,您无法使用它。
您可以通过在方法本身中声明类型参数来处理它:
public static <E> void printArray(E[] a){
.............
}
答案 3 :(得分:-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);
}
}