3
import java.util.*;
class A{
    public static void main(String[] args){
    }
    private List <B> bList;
    private Random generator = new Random();
    A(List<B> initialList){
        bList = new ArrayList<B> ();
        int listSize = initialList.size();
        bList.ensureCapacity(listSize);
             for (B b : initialList) {
             int bIndex = generator.nextInt(listSize);
             bList.add(bIndex , b);
        }
    }
}
class B{
}

読み取りエラーが発生しています

スレッド"main"の例外java.lang.RuntimeException:コンパイルできないソースコード-誤ったsymタイプ:java.util.List.ensureCapacity

4

4 に答える 4

2

sureCapacityはList型のメソッドではありません。

はい、これはArrayListのメソッドですが、参照bListはListです。このメソッドを使用するには、次のようにArrayListにキャストする必要があります。

((ArrayList<B>) bList).ensureCapacity(listSize);
         for (B b : initialList) {
         int bIndex = generator.nextInt(listSize);
         bList.add(bIndex , b);
    }

ちなみに、プログラムの全期間で、ArrayListのensureCapacityメソッドを直接呼び出すことはありません。

于 2013-03-16T05:12:47.770 に答える
1

List<T>はインターフェースですが、の定義は含まれていませんensureCapacity。これはとで利用可能です-したがって、ArrayListを呼び出すにはtoLinkedList<T>をキャストする必要があります。bListArrayListensureCapacity

((ArrayList<B>) bList).ensureCapacity(listSize);
于 2013-03-16T05:19:45.437 に答える
1

IDEは常に持っているのが良いです、あなたが間違いなくプログラミングするためにIDEを使用しているなら、時間は貴重ですあなたはbList.ensureCapacity(listSize);メッセージでこの行に赤いマークを得るでしょうそれはあなたの時間を確保して解決策を見つけるための時間を確保しensureCapacity(int)ますインターフェース。

The method ensureCapacity(int) is undefined for the type List<B>

したがってensureCapacity(int)、メソッドはArrayListであるListインターフェイスの実装内で使用できます。この行(bList)bList.ensureCapacity(listSize)をにキャストします。((ArrayList<B>) bList).ensureCapacity(listSize);

于 2013-03-16T05:48:42.270 に答える
0

リストでensureCapacityを呼び出したい場合は、リストではなくArrayListとして宣言する必要があります。

キャストは、一般的に言って、回避できるのであれば決して行わないでください。キャストに頼る必要なしに、変数をできるだけ一般的にするように宣言する必要があります。それが常に可能であるとは限りませんが、この特定のケースではそうしない理由はありません。

于 2013-03-16T06:23:15.653 に答える