1

これは私のコードのごく一部です。次の行である 4 行目に警告が表示されます。

Future<String>[] results = new Future[inputs.length]; // Stores the results

警告は、基本的に[inputs.length]for ループを実行できない部分にあります。警告は次のとおりです。

この行に複数のマーカー - 型の安全性: 型の式はFuture[]、準拠するために未チェックの変換が必要Future<String>[]です - 型の安全性: 型の式はFuture[]、準拠するために未チェックの変換が必要ですFuture<String>[]

for ループを変更する必要はなく、4 行目から警告を削除できる方法を提案していただけますか?

public StringBuilder fieldAggregator(String... inputs)
    throws InterruptedException, ExecutionException {
      StringBuilder sb = new StringBuilder();
      Future<String>[] results = new Future[inputs.length]; // Stores the results
      for (int i = 0; i < inputs.length; i++) { // Submits the tasks to thread pool
        results[i] = pool.submit(new ValidateInput<String>(inputs[i], pool));
      }
      for (int i = 0; i < inputs.length; i++) { // Aggregates the results
        sb.append(results[i].get());
      }
    return sb;
}
4

2 に答える 2

4

ジェネリック型パラメーターを持つ配列は存在しません。代わりにコレクションを使用してください。

于 2012-07-02T00:01:44.637 に答える
1

配列は、実行時に型の安全性を確保するために、格納されたデータの正確な型を知る必要があるオブジェクトです。格納されているジェネリック型<SomeType>は実行時に消去されるため、JVM は、Future格納する要素を実際に配置しようとしているかどうかを確認できません。<SomeType>または<SomeOtherType>、危険な動作として脅かされているため、警告が表示されます。

配列内のデータが正しいと確信している場合は、次@SuppressWarnings("unchecked")のような注釈でその警告を抑制してみてください

@SuppressWarnings("unchecked")
Future<String>[] results = new Future[inputs.length];

ArrayList<Future<String>>ただし、ジェネリックを使用した配列ではなく、コレクションのようなものを使用することをお勧めします。

于 2012-07-02T00:43:50.140 に答える