Java:何时使方法静态与实例 [已关闭]

2022-09-01 08:18:03

我有一个跟踪基因的课程。 有一种计算两个基因之间距离的方法。有什么理由让它保持静态吗?GeneGene

哪个更好?

public static int geneDistance(Gene g0, Gene g1)

public int geneDistance(Gene other)

支持/反对使其静态的论点?我理解一个成员是静态意味着什么,我只是对它对最大清洁度/效率等的影响感兴趣。

我重复相同的模式,返回两个基因的修剪版本,查找基因之间的匹配,查找动物(包含基因集合)之间的匹配等。


答案 1

实例,而不是静态的


对于这种情况,我认为第二种选择显然更好。如果您考虑一下,如果您愿意将对象传递给它,则可以将任何方法实现为静态,这似乎只是一个特例,因为另一个参数也是一个实例。

因此,我们对对称性和抽象的搜索由于必须在点运算符的两个实例对象之间进行选择而略有冒犯。但是,如果您将其视为操作员,那实际上并不是一个问题。.method.

另外,执行函数式链接的唯一方法是使用属性,即实例方法。你可能想工作。thing.up.down.parent.next.distance(x)


答案 2

使方法成为静态方法时,这意味着可以在没有类的实例的情况下调用该方法。这也意味着该方法无法访问实例变量,除非向它传递对对象的引用。

有时,使方法成为静态方法是有意义的,因为该方法与类相关联,而不是类的特定实例。例如,所有 parseX 方法,例如 )。这会将 a 转换为 ,但与对象的特定实例没有任何关系。Integer.parseInt(String sStringintInteger

另一方面,如果一个方法必须返回一些对对象的特定实例唯一的数据(就像大多数 getter 和 setter 方法一样),那么它就不能是静态的。