无法对非静态方法进行静态引用

时间:2015-12-10 18:16:20

标签: java getter-setter

我有一个谷歌我的问题,虽然我可以找到许多相同标题的问题,我似乎找不到适合我的例子的决议。

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

}

将getter / setter更改为静态似乎不起作用,我是一个绝对的java noob所以它可能是一些愚蠢的错误,任何人都有任何线索如何访问&#39;库中的getter / setter方法&#39 ;来自&#39;库测试人员的课程&#39;类。在此先感谢您的任何帮助

2 个答案:

答案 0 :(得分:2)

getBooks()不是Library类的静态方法。您需要创建库的实例,然后调用实例的方法。 (当您查询图书列表然后调用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();
}

答案 1 :(得分:1)

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

How to write a Unit Test?