首页 / JAVA / Java类型安全等于()
Java类型安全等于()
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java类型安全等于(),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1420字,纯文字阅读大概需要3分钟。
内容图文
为什么Java中没有类型安全的equals()?我认为这有助于在编译期间捕获一些错误,而不是以后的运行时错误.
作为一个简单的例子考虑这个:
class Person {
Integer birthYear;
}
class Car {
Long releaseYear;
}
有一个方法来接收一个人和汽车的集合,并假设列出该人出生的同一年发布的所有汽车可能最终使用:
if (person.birthYear.equals(car.releaseYear)) {
...magic happens...
}
但使用它不会发生任何魔法.即使在创建代码期间字段是相同类型,也可以在以后更改任何一个,而不会在比较代码上出现编译错误.
什么是避免这类问题的最佳做法?
解决方法:
根据设计,Java的equals()方法接受一个Object,这样您就可以创建一个异构的对象集合,并将它们相互比较以实现相等性.
例如,您可能有一个任意对象列表:
List<Object> lst = new ArrayList<>();
lst.add("abc");
lst.add(123); // Integer
lst.add(456L); // Long
那么equals()接受Object的事实意味着你可以实现:
void indexOf(List<Object> lst, Object target) {
for (int i = 0; i < lst.size(); i++) {
if (lst.get(i).equals(target))
return i;
}
return -1;
}
要具体回答您的问题,“类型安全”的唯一方法是定义一个新的方法名称,如strictEquals(),并且只用您的类型而不是Object类型实现参数.例如:
class Person {
boolean strictEquals(Person other) { ... }
}
class Car {
boolean strictEquals(Car other) { ... }
}
关于使用Integer和Long作为字段,请不要这样做.使用基本类型int和long,并使用==运算符来比较值.这有许多优点,例如更好的性能,没有NullPointerException,以及正确地将int与long进行比较的能力(而Integer.equals(Long)将始终由于不同的类型而返回false,即使对象具有相同的数值) .
内容总结
以上是互联网集市为您收集整理的Java类型安全等于()全部内容,希望文章能够帮你解决Java类型安全等于()所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。