转换为字符串是冗余的

Casting to String is redundant

提问人:IJR 提问时间:4/10/2023 最后编辑:MureinikIJR 更新时间:4/10/2023 访问量:159

问:

为什么 IntelliJ 告诉这种从 Object 到 String 的转换是多余的?

public class Utils {
    
    private static Map<Class, Function<Object, ?>> functions = new HashMap<>();
    
    static {
        functions.put(String.class, v -> (String) v);
        functions.put(Foo.class, v -> {
            Foo foo = new Foo();
            foo.setA((String) ((Map<String, Object>) v).get("A"));
            foo.setB((String) ((Map<String, Object>) v).get("B"));
            return foo;
        });
    }
}

enter image description here

java intellij-idea 转换 编译器警告冗余

评论


答:

3赞 Mureinik 4/10/2023 #1

映射的值类型是 - 即,函数的返回类型是什么并不重要。Function<Object, ?>

由于强制转换并没有真正“执行”任何操作,因此只需让编译器知道对象的类型,并且由于您不需要它成为字符串即可进行编译,因此您可以将其删除。

话虽如此,也没有理由“重新实现”该函数,您可以改用。v -> vFunction.identity()

评论

0赞 IJR 4/10/2023
但是我想将对象集合映射到所需的类型。在某些情况下(第一个函数),我知道这个集合包含值,这就是我想做这个映射的原因。我想将包含 s 的映射到 .其他情况(第二个函数),我知道这个集合包含 s(每个条目都是 )作为 的属性。我想将包含的内容映射到 。StringObjectCollection<Object>StringCollection<String>MapFooObjectCollection<Object>Map<String, Object>Collection<Foo>