如何在 java 中将变量值从一页继承到另一页?

How to inher variables values from one page to another in java?

我是 java 的新手,我受困于此。 我有一个 BasePage class,其中包含一个“全局”列表和一个像这样的 int 值;

public class BasePage {
    public int number;
    public List<String> stringList = new ArrayList<>;
}

此外,我有两个 class 扩展该页面;

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 classes 后访问“stringList”和“number”时,这些值不会“堆叠”在 BasPage 中。有没有办法做到这一点?谢谢!

您的字段不是静态的,也就是说,BasePage 对象的每个实例都有自己的 'version'。 (ClassA 的一个实例也是 一个 BasePage 实例;ClassA 扩展了 BasePage 这意味着它是一种更具体的类型BasePage 的。换句话说,这是一个带有额外内容的 BasePage)。

因此,当您 运行:

BasePage z = new BasePage();
ClassA a = new ClassA();
ClassB b = new ClassB();

您有 3 个不同的 number 和 3 个不同的 stringList

您可以通过将它们设为 static 来将其减少到整个 VM 只有一个,但是 注意 ,这几乎被普遍嘲笑为糟糕的代码风格:你已经创建了全局状态,这很难测试,并且使代码难以阅读。

一个更好的主意是有一个单独的 class,这样它的实例代表 'an application'、'a library'、'a ledger' 或类似的东西:包含 'a whole bunch of BasePage instances'.

的概念

这个 stringList 变量将在图书馆 class 中,而不是书 class 中。示例:

糟糕的设计

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;
    }
}