1

次のコードを検討してください。

List<Integer>ints= new ArrayList<Integer>();
lst.add(new Object());//no suitable method found for add(Object)...

このエラーの原因は何ですか? コンパイル時には型消去があり、boolean add (E e)消去後のメソッドには署名がありますadd(Object o)。この場合、ompiler がどのように機能するか詳しく書いていただけますか?

では、ブリッジ方式はどうでしょうか。私が理解しているように、ブリッジメソッドには次の実装があります。

boolean add(Object o){return this.add((Integer) o)}
4

3 に答える 3

1

Bridge メソッドは、メソッドではなくクラス定義に含まれます。例:

public class Test implements Comparable<Test> {

    public int compareTo(Test o) {
        return ...;
    }
...

コンパイラは、ブリッジ メソッド (非表示) をここに追加します。

public int compareTo(Object o) {
    return compareTo((Test)o);
}

バイトコードの Comparable インターフェイスにはint compareTo(Object o)メソッドがあり、クラスが必要とするこのメソッドをクラスが実装していることを JVM が検出するためint compareTo(Object o)

于 2013-09-26T15:44:36.780 に答える