0

この行でコンパイル エラーが発生する理由 String s=data.get(idx);

更新:型の不一致が発生します: E から文字列に変換できません

    public class Parent<E> {
        ArrayList<E> data=new ArrayList<E>();

        public void add(E d){
            data.add(d);
        }
        public List<E> getData(){
            return data;
        }
    }

    public class Child<E> extends Parent<E>{

        public void appendData(E newItem){
            super.add(newItem);
        }
        public void displayData(int idx){
            List<E> data=this.getData();
            **String s=data.get(idx);**//I get compilation error in this line
            System.out.println(s);
        }

        public static void main(String[] args) {
            Child<String> c=new Child<String>();
            c.appendData("Data1");
            c.appendData("Data2");

            c.displayData(1);
        }
    }

ソリューション更新クラス:

public class Child<S> extends Parent<String>{

public void appendData(String newItem){
    super.add(newItem);
}
public void displayData(int idx){
    List<String> data=this.getData();
    String s=data.get(idx);
    System.out.println(s);
}

public static void main(String[] args) {
    Child c=new Child();
    c.appendData("Data1");
    c.appendData("Data2");

    c.displayData(1);
}
}
4

6 に答える 6

0

これは とはあまり関係ありませんgenerics。しかし、質問に答えるために、

String s=data.get(idx);

に置き換える必要があります

String s= String.valueOf( data.get(idx) );

data.get(idx)が返されないことが絶対に確実な場合はnull、次を使用することもできます。

String s= data.get(idx).toString() ;

それ以外の場合は、s を受け取りますNullPointerException

2回目の読み取りでは、使用することもできます

System.out.println( data.get(idx) ) ;

直接。内部的には、これは を使用するString.valueOf()ため、同様に例外に対して安全です。

于 2013-08-22T03:45:40.963 に答える
0

問題を解決するには、文字列にキャストするか、ジェネリック パラメータで文字列を使用します。

String s = data.get(idx);
ArrayList<String> data=new ArrayList<String>();

ジェネリック メソッドと型パラメーターを使用しているため、このエラーが発生する理由そのため、ジェネリック リストから文字列に値を割り当てると、エラーが発生します。コンパイラは、リストに実際に文字列データが含まれていることを知りません。

于 2013-08-22T04:33:43.790 に答える