[英]What to return when printing out Objects using the toString method and a for each loop?
我目前有一個toString方法,類似於下面的方法。 請忽略對象只是臨時命名。 我這樣做是為了在每個變量等的類型之間沒有混淆:
@Override
public String toString() {
for(Object object : ArrayList) {
System.out.println("This object is a " + object.getVariableA() + " and a " + object.getVariableB() + ".");
}
return null;
}
但是toString方法要求我返回一個值。 我顯然只想返回我正在打印的字符串,盡管如果我在其中放置一個return語句,它只會打印一個對象,而不是我正在遍歷的所有對象。 什么是打印所有這些值而不是簡單地返回null的最佳方法,因為我不希望在所有Object之后都打印出來? 我還想確保將這些對象中的每一個都像當前一樣打印在單獨的行上,因此請不要建議包含一個沒有換行符的長連接字符串的解決方案,因為這不適合這種情況。
提前致謝!
toString
不能輸出任何東西。 它的工作是返回相關對象的適當字符串表示形式,而不是在任何地方輸出該表示形式。 那超出了它的問題范圍。
而是構建並返回一個字符串(可能使用StringBuilder
)。
例如,類似:
@Override
public String toString() {
StringBuilder sb = new StringBuilder(some_appropriate_size);
for(Object object : ArrayList) {
sb.append("This object is a ")
.append(object.getVariableA())
.append(" and a ")
.append(object.getVariableB())
.append(".\n");
}
return sb.toString();
}
我還想確保將這些對象中的每一個像當前一樣打印在單獨的行上,因此請不要建議包含一個長連接字符串的解決方案,因為這在這種情況下不適合。
上面將數組列表中的項目放在單獨的“行”上(通過\\n
)。 但是“一個長連接的String”是toString
要做的唯一適當的事情。 如果要獲得不同的結果,則必須使用不同的方法,而不是破壞toString
的約定。
您可以創建一個String
並添加每次迭代所需的內容:
@Override
public String toString() {
String result = "";
for(Object object : ArrayList) {
result += "This object is a " + object.getVariableA() + " and a " + object.getVariableB() + ".\n");
}
return result;
}
不要忘了添加"\\n"
換行符,這樣您就可以在不同的行中打印每個“部分結果”。
您在問題中聲明:
我還想確保將這些對象中的每一個像當前一樣打印在單獨的行上,因此請不要建議包含一個長連接字符串的解決方案,因為這在這種情況下不適合。
那么您可能不應該使用toString()
; 那不是為了什么。 它用於返回單個字符串,該字符串表示對象。 它永遠不應該輸出任何東西。
向您的類添加一個吸氣劑,以返回對象List
,並根據需要輸出它們。 如果您真的想讓類自打印,請添加一個print(OutputStream os)
方法,該方法采用提供的OutputStream
(或者也許是PrintStream
),並將這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.