重写toString方法

use*_*365 1 java tostring

我使用.toString来返回对象的字符串表示,即

jcb.engineMove(move.toString());
Run Code Online (Sandbox Code Playgroud)

将产生e2e4.

我想要做的是将此对象(e2e4)的文本提取为字符串.在谷歌搜索后,我遇到了覆盖toString方法,所以我想出了这个:

@Override
public String toString() {
    String s = "";
    int newRank = getRank();
    int newFile = getFile();
    final Move move = new Move(rank, file, newRank, newFile);
    s+="" + move;
    return s;
}
Run Code Online (Sandbox Code Playgroud)

我的问题很基本:

  1. 这是正确的方法
  2. 在尝试获取对象的文本时如何调用此例程?

jah*_*roy 8

压倒Object.toString是一种很好的方法.

但是,您当前的实现通过创建新Move对象会产生重大错误(请参阅下文).

要调用例程(一旦修复它),请完成您已经在做的事情:

jcb.engineMove(move.toString());

如果toString()只应该用于调试(如mre所说),你可以实现另一个名为getText同样的方法.

重要的提示:

应该Move在其toString方法中创建新对象.

这是一个非常糟糕的主意(正如其他人所说).

您的toString方法应该只是构建一个字符串并返回它.