Java编程--->未来[输入。长度 ]

时间:2012-07-01 23:36:18

标签: java warnings future

这是我的代码的一小部分。我在第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;
}

2 个答案:

答案 0 :(得分:4)

不存在具有泛型类型参数的数组。改为使用集合。

答案 1 :(得分:1)

数组是应该知道精确类型的存储数据的对象,以确保运行时的类型安全。存储在<SomeType>中的泛型类型在运行时被删除,因此JVM无法检查您是否实际尝试放置存储Future<SomeType>的{​​{1}}元素,因此它是威胁是危险行为,这就是你有警告的原因。

如果您完全确定数组中的数据是否正确,请尝试使用<SomeOtherType>注释来抑制该警告,例如

@SuppressWarnings("unchecked")

但我建议使用像@SuppressWarnings("unchecked") Future<String>[] results = new Future[inputs.length]; 这样的集合,而不是使用泛型的数组。