簡體   English   中英

使用toString方法和每個循環的a打印對象時返回什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM