java - 使用 this 或传递参数对象有什么区别
问题描述
假设我有一个方法:
public void boolean isEndingStation(Station station, BusLine busLine){
...
}
这是在一个BusLine
类里面。如果我只使用调用函数的对象而没有使用关键字的BusLine
参数,有什么区别吗?this
我的意思的例子:
public void boolean isEndingStation(Station station){
this.[code]
...
}
像第一个示例一样传递参数似乎是多余的,并且总体上使方法看起来更混乱。
解决方案
它是否“冗余”取决于它的使用方式。
如果您要询问BusLine
所提供的特定实例是否Station
是“终点站”,那么是的,这是多余的,而且非常混乱。
同样,如果您询问 aStation
是否是给定 的“终点站”,也会令人困惑BusLine
,例如,station.isEndingStationFor(aBusLine)
采用 aStation
是没有意义的。
例如,如果它是一个静态方法,Station.isStationEndStation(aStation, aBusline)
那么它是有意义的。
这是 Java 风格的 OOP 旨在做的事情之一:在类的实例上发送消息(“调用方法”)。在这些函数内部,使用实例数据对该消息做一些有意义的事情。
isEndingStation
对进行方法调用甚至可能是有意义的Station
,例如,
public void boolean isEndingStation(Station station) {
return station.isEndFor(this);
}
最终,最有意义的事情取决于功能所在的位置、您希望如何访问它、系统的架构方式等。
推荐阅读
- spring-boot - Spring Boot 重定向到另一个 url
- javascript - javascript 从数据中获取像 sql 一样的 DISTINCT 计数
- javascript - 如何在手机网站上制作转发按钮,使用内部转发功能
- c# - 验证(HTML5):.aspx 网络表单不支持元素“app-root”
- python - 如何拆分标题行以创建新列?
- highcharts - Higcharts:当有不同颜色的 plotBand 时,如何在图表上渲染背景文本?
- flutter - Flutter Bloc 测试没有捕获 thenThrow WebException
- java - 为什么我的依赖项在 pom 文件中的 maven 坐标之一更改遵循新项目的 maven 坐标
- r - 如何从R中的累积总和中减去一列
- python - 检测是否使用赋值运算符激活了 python 函数(并且应该返回一个值)