gpt4 book ai didi

java - 如何将两种计算相同但字段不同的方法组合起来

转载 作者:行者123 更新时间:2023-11-30 04:08:08 26 4
gpt4 key购买 nike

如何组合两个具有相同计算但操作(读取和写入)类的不同字段的方法。一个非常简化的航空代码示例:

class TileCalculator 
{
int length;
int width;
int tileLength;
int tileWidth
int cols;
int rows;

void calculateColumns()
{
this.cols = this.width/this.tileWidth;
}

void calculateRows()
{
this.rows = this.length/this.tileLength;
}

}

由于这两种方法执行完全相同的计算,但只是使用不同的字段作为输入和输出,因此将它们组合起来似乎是明智的,但我不知道如何组合。

更新:我认为我可能过于简单化了,以至于回答者试图解决具体案例。一个更现实的例子是:

void calculateCols()
{
int tileCols = width/tileWidth;
int remainder = width%tileWidth;
if (remainder==0) {
// there is an exact number of whole tiles
fullTileCols = tileCols;
firstT = tileWidth;
usedTileCols = tileCols;
} else {
// there is a remainder
fullTileCols = tileCols - 1;
firstT = (remainder+tileWidth)/2;
usedTileCols = tileCols + 1;
}
}

void calculateRows()
{
int tileRows = length/tileLength;
int remainder = length%tileLength;
if (remainder==0) {
// there is an exact number of whole tiles
fullTileRows = tileRows;
firstCut = tileLength;
usedTileRows = tileRows;
} else {
// there is a remainder
fullTileRows = tileRows - 1;
firstCut = (remainder+tileLength)/2;
usedTileRows = tileRows + 1;
}
}

我并不是说重新设计不是答案,但正如您所看到的,涉及多个字段,因此简单的返回值可能无法解决问题。这就是为什么我使用字段而不是简单的函数,并且当前设置的可维护性是我关心的。

最佳答案

不,我不会合并它们,我会改变它们。

  • 我会去掉行和列字段
  • 我会放弃上述方法,因为它使对象的状态依赖于在使用对象之前始终调用的这些方法 - 这是一个有风险的提议。
  • 相反,我会创建两个计算的 getter 方法。这样,就可以在需要时保证完成计算。

例如,

public int getColumns() {
return width / tileWidth;
}

public int getRows() {
return length / tileLength;
}
<小时/>

编辑

我想您可以创建一个 RowCol 类,它具有完整、第一个和已使用的字段,并且只有一个方程用于执行上述计算,并且您创建两个实例,一个用于行,一个用于包含列的实例类,但如果这样做的理由只是结合这些小方法,我质疑这样做的必要性或好处。是的,您应该遵循 DNRY 规则,但当我重复使用相同的代码 3 次或以上时,我会更担心这一点。

关于java - 如何将两种计算相同但字段不同的方法组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20268709/

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