Java 重写toString方法
我使用.toString返回对象的字符串表示形式,即Java 重写toString方法,java,tostring,Java,Tostring,我使用.toString返回对象的字符串表示形式,即 jcb.engineMove(move.toString()); 将产生e2e4 我试图做的是将这个对象(e2e4)的文本提取为字符串。在谷歌搜索之后,我发现覆盖了toString方法,因此我提出了以下建议: @Override public String toString() { String s = ""; int newRank = getRank(); int newFile = getFile();
jcb.engineMove(move.toString());
将产生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;
}
我的问题相当基本:
Object#toString
的使用应限于调试。Object#toString的使用应限于调试
toString()
方法,这意味着Java中的每个对象都有此方法。如果您的自定义对象(从类继承而来)覆盖了toString()
方法,那么您的基类将提供此方法的一个新实现,该方法将隐藏/省略超类中的toString()
方法toString()
方法时,调用该类型的实例(假设它是a)a。toString()
将导致调用您的实现
toString()
方法,这意味着Java中的每个对象都有此方法。如果您的自定义对象(从类继承而来)覆盖了toString()
方法,那么您的基类将提供此方法的一个新实现,该方法将隐藏/省略超类中的toString()
方法这意味着,当您在自定义类a中定义自定义的
toString()
方法时,调用该类型的实例(假设它是a)a.toString()
将导致调用您的实现。重写对象。toString
是一种很好的方法
但是,您当前的实现犯了一个重大错误,创建了一个新的Move
对象(见下文)
要调用例程(修复后),请完全按照您已经在做的操作:
jcb.engineMove(move.toString())代码>
如果toString()
应该只用于调试(正如mre所说),那么您可以实现另一个名为getText
的方法,该方法也可以执行相同的操作
重要提示:
不应在其toString
方法中创建新的Move
对象
这是一个非常糟糕的主意(正如其他人提到的)
您的toString
方法应该只构建一个字符串并返回它。重写对象。toString
是一种很好的方法
但是,您当前的实现犯了一个重大错误,创建了一个新的Move
对象(见下文)
要调用例程(修复后),请完全按照您已经在做的操作:
jcb.engineMove(move.toString())代码>
如果toString()
应该只用于调试(正如mre所说),那么您可以实现另一个名为getText
的方法,该方法也可以执行相同的操作
重要提示:
不应在其toString
方法中创建新的Move
对象
这是一个非常糟糕的主意(正如其他人提到的)
您的toString
方法应该只构建一个字符串并返回它
在这种情况下,我可能不会使用toString(),因为看起来您只是在重复Move类中的逻辑。为了添加任何其他细节,我有一个问题:您将这个toString()方法添加到哪个类
您可以像调用其他方法一样调用此方法。首先,您需要一个对象的实例来调用它:
someObj.toString()
为了提供更多的细节,我需要回答上一个问题
在这种情况下,我可能不会使用toString(),因为看起来您只是在重复Move类中的逻辑。为了添加任何其他细节,我有一个问题:您将这个toString()方法添加到哪个类
您可以像调用其他方法一样调用此方法。首先,您需要一个对象的实例来调用它:
someObj.toString()
要提供更多详细信息,我需要回答前面的问题。这是toString()
在Move
类中实现的吗?如果是,那么我看到的是一个无限循环。而且。。。我真的不明白为什么要创建Move
类的新实例
无论如何,要在Move
类中生成字符串表示,请尝试以下操作:
public class Move {
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(rank).append(file);
builder.append(newRank).append(newFile);
return builder.toString();
}
}
那么,如果您想获得字符串表示,那么您实际正在做的(jcb.engineMove(move.toString());
)是一种不错的方法。这是在move
类中实现的toString()
吗?如果是,那么我看到的是一个无限循环。而且。。。我真的不明白为什么要创建Move
类的新实例
无论如何,要在Move
类中生成字符串表示,请尝试以下操作:
public class Move {
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(rank).append(file);
builder.append(newRank).append(newFile);
return builder.toString();
}
}
那么,如果您想获得实际执行的字符串表示(jcb.engineMove(move.toString());
)是一种不错的方法