不能对非静态方法进行静态引用

cant make a static reference to the non static method

我的问题有一个 google,虽然我可以找到许多标题相同的问题,但我似乎找不到适合我的示例的解决方案。

Library.java

public class Library {

public ArrayList<Book> books = new ArrayList<Book>();

public Library(){
      super();
    }

//Getters/Setters
public Library(ArrayList<Book> books) {
    this.books = books;
}

public ArrayList<Book> getBooks() {
    return books;
}

public void setBooks(ArrayList<Book> books) {
    this.books = books;
}

LibraryTester.java

import java.util.ArrayList;
import java.util.Scanner;

public class LibraryTester {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    ArrayList<Book> books = Library.getBooks(); //Getting error here
    books = Library.CreateBooksArrayList();
    MenuInput(sc, books);
    sc.close();
    Library.setBooks(books); //And here

}

将 getters/setters 更改为静态似乎不起作用,我绝对是 java 菜鸟所以这可能是一些愚蠢的错误,有人知道如何访问 getter/setter 'library' class 中的方法来自 'library tester' class。在此先感谢您的帮助

getBooks() 不是库 class 的静态方法。您需要创建库的实例,然后调用该实例的方法。 (也不确定当您查询图书列表然后调用 setBooks 将其设置为您阅读的值时,您试图用您的 main 方法完成什么......)。也会赞成阅读一两个好的教程的建议。

import java.util.ArrayList;
import java.util.Scanner;

public class LibraryTester {

   public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    Library lib = new Library();
    ArrayList<Book> books = lib.getBooks();
    MenuInput(sc, books);
    sc.close();
}

看起来您正在尝试测试您的代码(好主意),但您使用了错误的工具。不要将您的测试用例包装在应用程序中 - 而是使用 jUnit 来执行和断言您的 class 行为。这可能会有用。

How to write a Unit Test?