我是java的新手,我被這個問題難住了。 我有一個BasePage類,它包含一個 "全域 "List和一個int值,就像這樣;
我有一個BasePage類,它包含一個 "全域 "List。
public class BasePage {
public int number;
public List<String> stringList = new ArrayList<> 。
}
此外,我有兩個班級擴展了該頁面;
public class ClassA extends BasePage {
public void addStringToList {
stringList.add("String1")。
number ;
}
}
還有其他:
public class ClassB extends BasePage {
public void addStringToList {
stringList.add("String2")。
number ;
}
}
然后,當我在呼叫那個who類后訪問 "stringList "和 "number "時,這些值在BasPage中沒有被 "堆疊"。有什么方法可以實作這一點嗎?謝謝!
uj5u.com熱心網友回復:
你的欄位不是靜態的,也就是說,BasePage物件的每一個實體都有它自己的 "版本"。(而ClassA的實體也是一個BasePage實體;ClassA擴展了BasePage,這意味著它是一種更特殊的BasePage。換句話說,它是一個帶有額外內容的BasePage)。
因此,當你運行:
時BasePage z = new BasePage() 。
ClassA a = new ClassA() 。
ClassB b = new ClassB() 。
你有3個不同的numbers和3個不同的stringList。
你可以通過使它們成為static來減少整個虛擬機的數量,但注意,這幾乎被普遍嘲笑為不良代碼風格。你已經創建了全域狀態,這很難測驗,并且使代碼難以閱讀。
一個更好的想法是建立一個單獨的類,使其實體代表 "一個應用程式"、"一個庫"、"一個賬簿 "或類似的東西。一個包含了'一大堆 BasePage 實體'的想法的東西。
這個 stringList 變數將在 library 類中,而不是在 book 類中。例子:
糟糕的設計
public class Book {
private static int booksInLibrary = 0;
private String title;
public Book(String title) {
this.title = title。
booksInLibrary ;
}
}
良好的設計
public class Library {
private final List<Book> books = new ArrayList<>()。
public int countBooks() {
return books.size()。
}
public void addBook(Book book) {
books.add(book)。
}
}
public class Book{
private final String title。
public Book(String title) {
this.title = title。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313129.html
標籤:
上一篇:從一個工廠訪問一個變數
