簡體   English   中英

為Java的內置類輕松覆蓋toString()

[英]Easily overriding toString() for Java's built-in classes

我有一個處理M×N矩陣的簡單程序。 完成處理后,我想將矩陣打印到標准輸出。 我知道我可以編寫一些方法,例如static [void / String] matrixPrint(int [] [] myMatrix)來打印矩陣或返回它的String表示。

但是我認為更優雅的解決方案是覆蓋Arrays類中的toString()方法。 這樣我就可以調用System.out.println(myMatrix),這在我看來比上面的任何一個都更清晰優雅。

是否有一種簡單的方法可以在不創建擴展數組的另一個類的情況下執行此操作 或者還有其他方法可以優雅地從Java的內置類中打印出對象嗎?

你不能覆蓋數組的toString() (它沒有實現一個)。 但是,您可以使用Arrays.deepToString(Object[]) ,它返回指定數組的“深層內容”的字符串表示形式。 如果數組包含其他數組作為元素,則字符串表示包含其內容,依此類推。 此方法用於將多維數組轉換為字符串。

這可能看起來像,

System.out.println(Arrays.deepToString(myMatrix));

Arrays類有許多用於打印數組的實用工具。 但是,它們依賴於您對打印陣列的默認Java格式感到滿意。 如果你想做任何具體的事情,你需要編寫自己的方法。

Java 8流提供了一些很好的功能,您可以使用它們而無需顯式迭代。 例如:

Arrays.stream(matrix)
    .map(row -> Arrays.stream(row).collect(Collectors.joining("\t"))
    .forEach(System.out::println);

簡短的回答是“不”。

為了覆蓋方法,您需要擴展一個類。 Java沒有擴展數組的語法,即你不能寫

class MyClass extends String[] { // <<= This will not compile
    ...
}

但是, Arrays類提供了一種字符串轉換方法 ,可以處理任何類型的數組。 這是用Java打印數組的慣用方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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