[英]How can I override the toString method of an ArrayList in Java?
我想在 Java 中為 ArrayList 實現我自己的 toString() 方法。 但是,即使我像這樣將 toString() 添加到包含 ArrayList 的類中,我也無法讓它工作。
@Override
public String toString() {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
當我像這樣調用我的 ArrayList list.toString()
,我仍然得到默認表示。 我錯過了什么嗎?
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString();
}
};
您不能覆蓋ArrayList
1的toString
方法。 相反,您可以使用實用程序類以您想要/需要的方式將ArrayList
轉換為String
。 另一種選擇是使用Arrays.deepToString(yourList.toArray())
。
使用 Java 8,這可以很容易地完成:
//List<String> list
System.out.println(String.join(",", list));
或者,如果您有一個List<Whatever>
:
System.out.println(
list.stream()
.map(Whatever::getFieldX())
.collect(Collectors.joining(", "))
);
我仍然反對擴展ArrayList
或類似的東西,在技術上是可行的,但我認為它不是一個好的選擇。
1您可以擴展ArrayList
並覆蓋toString
但通常這不是一個好主意。 更多信息:
您需要編寫一個從 ArrayList 擴展的類:
import java.util.ArrayList;
public class MyArrayList extends ArrayList {
private static final long serialVersionUID = 1L;
@Override
public String toString() {
String result = "+";
for (int i = 0; i < this.size(); i++) {
result += " " + this.get(i);
}
return result;
}
}
你應該做類似的事情
public static String listToString(List<?> list) {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
並將列表作為listToString()
的參數listToString()
。 您可以在技術上擴展ArrayList
(使用匿名類或具體類)並自己實現toString
,但這在這里似乎沒有必要。
要覆蓋 ArrayList 整數數組的 toString():
class MyArrayList extends ArrayList<Integer> {
private static final long serialVersionUID = 1L;
@Override public String toString( ) {
String output = "";
for ( int i = 0 ; i < this.size(); i++ )
output = Integer.toString( this.get( i ) );
return output;
}
}
ArrayList<Integer> list =
new ArrayList<>(Arrays.asList( 5, 4, 2, 9, 1, 7 ) );
System.out.print( "list = " + list );
將生成:list = [5, 4, 2, 9, 1, 7]
您可以在新創建的類中覆蓋 toString 方法,但應確保創建的類擴展了 ArrayList。 然后,您可以覆蓋 toString 方法。 這是基於IS關系。 新創建的類是一種 ArrayList。
您還可以創建一個 ArrayList,它基於 HAS 關系。 在這種情況下,您必須編寫另一個方法來返回 String 而不是覆蓋 toString 方法。
我想為Java中的ArrayList擁有toString()方法的自己的實現。 但是,即使我將這樣的toString()添加到包含ArrayList的類中,我也無法正常工作。
@Override
public String toString() {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
當我像這樣的list.toString()
調用ArrayList時,我仍然得到默認表示。 我想念什么嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.