Java中的不可变数据 – 静态或实例运算符?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中的不可变数据 – 静态或实例运算符?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1184字,纯文字阅读大概需要2分钟。
内容图文
![Java中的不可变数据 – 静态或实例运算符?](/upload/InfoBanner/zyjiaocheng/806/a9ac23fa4c4a4dd1bfc81518101bd2ce.jpg)
想象一下完全不可变的任何Java类.我将使用以下作为示例:
public class Point2D {
public final int x;
public final int y;
public Point2D(final int x, final int y) {
this.x = x;
this.y = y;
}
}
现在考虑在这个类上添加一个运算符:一个方法,它接受一个或多个Point2D实例,并返回一个新的Point2D.
这有两种可能性 – 静态方法或实例方法:
public static Point2D add(final Point2D first, final Point2D second) {
return new Point2D(first.x + second.x, first.y + second.y);
}
要么
public Point2D add(final Point2D other) {
return new Point2D(this.x + other.x, this.y + other.y);
}
是否有理由选择一个而不是另一个?这两者之间有什么不同吗?据我所知,他们的行为是相同的,所以任何差异都必须是他们的效率,或者他们作为程序员的工作容易程度.
解决方法:
使用静态方法可以防止两件事:
>用大多数模拟框架嘲笑这个类
>覆盖子类中的方法
根据具体情况,这些事情都可以,但从长远来看,它们也会造成严重的悲痛.
因此,就我个人而言,我只有在有充分理由这样做时才使用静电.
尽管如此,考虑到问题中的特定Point2D类,我倾向于实际使用静态方法.这个类闻起来应该具有“值”语义,因此相同坐标的两个点相等并且具有相同的哈希码.我也看不出你如何有意义地扩展这个课程.
想象一下例如Matrix2D类.在那里考虑子类可能很有意义,例如SparseMatrix.然后,最有可能的是,您希望覆盖计算密集型方法!
内容总结
以上是互联网集市为您收集整理的Java中的不可变数据 – 静态或实例运算符?全部内容,希望文章能够帮你解决Java中的不可变数据 – 静态或实例运算符?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。