0

重複の可能性:
実行時のジェネリックメソッドパラメーターのタイプの決定
静的メソッドのジェネリック

以下のコードは、実行時に。で失敗しますcannot select from a type variable。タイプをパラメーター()として渡さなくてもこれを行う方法はありますClass<E[]> typeか?

public static <E extends Deal> E[] parseDealsFromJSON(String body) {
    parser.fromJson(body, E[].class); // fails here
}

public static void main(String[] args) {
    SubDeal[] deals = parseDealsFromJSON("");
}
4

1 に答える 1

2

問題は、の右側のサイズで=は、左側にどのタイプが必要かわからないことです。つまり、Javaはこの種の型推論を行いません。

メソッドは、リターン型が必要な型を認識していません。(MethodHandlesを使用して実行時に例外が発生しましたが、Java 8または9でこれらの機能が導入される可能性があります)

たとえば、戻り型の非常に基本的な型推論は、実行時(またはコンパイル時)には実行されません

public Double getValue() {
    return 5.0;
}

double d = m.getValue(); // not smart enough to avoid creating a `Double` here.

Genericsを使用すると、型消去のボーナスが追加されます。これE[]は、実際にDeal[]は実行時であることを意味します。あなたが好きだったかもしれないどの取引タイプが失われます。

于 2012-08-31T11:38:38.887 に答える