这是我的代码的一小部分。我在第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;
}
答案 0 :(得分:4)
不存在具有泛型类型参数的数组。改为使用集合。
答案 1 :(得分:1)
数组是应该知道精确类型的存储数据的对象,以确保运行时的类型安全。存储在<SomeType>
中的泛型类型在运行时被删除,因此JVM无法检查您是否实际尝试放置存储Future
或<SomeType>
的{{1}}元素,因此它是威胁是危险行为,这就是你有警告的原因。
如果您完全确定数组中的数据是否正确,请尝试使用<SomeOtherType>
注释来抑制该警告,例如
@SuppressWarnings("unchecked")
但我建议使用像@SuppressWarnings("unchecked")
Future<String>[] results = new Future[inputs.length];
这样的集合,而不是使用泛型的数组。