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 回答