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

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 に答える