gpt4 book ai didi

java - 原始类型总是不好吗?

转载 作者:行者123 更新时间:2023-12-02 03:35:21 25 4
gpt4 key购买 nike

Effective Java 的第 23 条(不要在新代码中使用原始类型)声称在 Java 代码中使用原始类型总是危险的

例如,它声称以下方法是危险且不安全的

// Use of raw type for unknown element type - don't do this!
static int numElementsInCommon(Set s1, Set s2) {
int result = 0;
for (Object o1 : s1)
if (s2.contains(o1))
result++;
return result;
}

虽然,我可以看到对 s1 和 s2 进行任何类型的写操作或类转换操作都可能导致各种异常,但我不明白为什么上述方法不安全。作者 Joshua Bloch 继续推荐以下方法。

// Unbounded wildcard type - typesafe and flexible
static int numElementsInCommon(Set<?> s1, Set<?> s2){
int result = 0;
for (Object o1 : s1)
if (s2.contains(o1))
result++;
return result;
}

换句话来说,如果一个方法只使用了Object.Class的方法,并且不对传递的参数做任何修改,那为什么不好呢?

最佳答案

这很糟糕,因为它会阻止编译器对更多代码进行类型检查。

当然,没有它你也可以编写出良好且安全的代码。人们每天都用 Perl 和 Javascript 来做这件事。即使在 Java 中,使用原始类型和在运行时使用类型化集合也没有区别。但是有一点值得一提的是让编译器为您尽可能多地进行检查。

因此,使用示例中的方法,使用通配符类型 ( Set<?> ) 而不是原始类型。这样,如果您确实编写了“危险”代码,如 s1.addAll(s2);编译器会对你大喊大叫。

关于java - 原始类型总是不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37516878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com