我在java下面的类代码中得到了这个警告消息:
**错误信息:**非varargs调用varargs方法,最后一个参数的参数类型不精确;将varargs调用强制转换为java. lang.Object将非varargs调用强制转换为java.lang.Object[]并取消显示此警告
public class EntityNotFoundException extends RuntimeException {
public EntityNotFoundException(Class<?> clazz, String... searchParamsMap) {
super(EntityNotFoundException.generateMessage(clazz.getSimpleName(), toMap(String.class, String.class, searchParamsMap)));
}
private static String generateMessage(String entity, Map<String, String> searchParams) {
return StringUtils.capitalize(entity) +
" was not found for parameters:-> " +
searchParams;
}
private static <K, V> Map<K, V> toMap(
Class<K> keyType, Class<V> valueType, Object... entries) {
if (entries.length % 2 == 1)
throw new IllegalArgumentException("Invalid entries");
return IntStream.range(0, entries.length / 2).map(i -> i * 2)
.collect(HashMap::new,
(m, i) -> m.put(keyType.cast(entries[i]), valueType.cast(entries[i + 1])),
Map::putAll);
}
}
1条答案
按热度按时间7lrncoxx1#
可以使用
Map.of(k0, v0, k1, v1, etc)
。类型安全,但需要重载不同数量的Map条目。
您的代码存在
String...
/String[]
作为Object...
传递的问题。它具有模糊性-与任何实际的java规则无关-要么一个Object与String数组一起传递,要么每个单独的String作为单独的Object传递。简单地指定
这允许普遍传递String数组。我不确定E是否不能更局限于K和V。因此,被评论。