提问人:IJR 提问时间:4/10/2023 最后编辑:MureinikIJR 更新时间:4/10/2023 访问量:159
转换为字符串是冗余的
Casting to String is redundant
问:
为什么 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;
});
}
}
答:
3赞
Mureinik
4/10/2023
#1
映射的值类型是 - 即,函数的返回类型是什么并不重要。Function<Object, ?>
由于强制转换并没有真正“执行”任何操作,因此只需让编译器知道对象的类型,并且由于您不需要它成为字符串即可进行编译,因此您可以将其删除。
话虽如此,也没有理由“重新实现”该函数,您可以改用。v -> v
Function.identity()
评论
0赞
IJR
4/10/2023
但是我想将对象集合映射到所需的类型。在某些情况下(第一个函数),我知道这个集合包含值,这就是我想做这个映射的原因。我想将包含 s 的映射到 .其他情况(第二个函数),我知道这个集合包含 s(每个条目都是 )作为 的属性。我想将包含的内容映射到 。String
Object
Collection<Object>
String
Collection<String>
Map
Foo
Object
Collection<Object>
Map<String, Object>
Collection<Foo>
评论