Java错误:varargs方法的非varargs调用,最后一个参数的参数类型不精确

sqougxex  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(456)

我在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);
}

}

7lrncoxx

7lrncoxx1#

可以使用Map.of(k0, v0, k1, v1, etc)
类型安全,但需要重载不同数量的Map条目。
您的代码存在String.../String[]作为Object...传递的问题。它具有模糊性-与任何实际的java规则无关-要么一个Object与String数组一起传递,要么每个单独的String作为单独的Object传递。
简单地指定

<K, V, E /*super K & V*/> toMap(Class<K> keyType, Class<V> valueType, E[] entries) {

这允许普遍传递String数组。我不确定E是否不能更局限于K和V。因此,被评论。

相关问题