繁体   English   中英

访问ArrayList中的对象类变量(java)

[英]Accessing an object class variable in ArrayList (java)

所以,假设我有一堂课来描述一本书

   public class Book {
     String name;
     int pages;
     String auother;
     boolean available;
     String rentername;
  }

现在,我设置了一个数组列表,以包含我希望在运行时拥有/添加/删除的图书数量未知的列表。 问题是,当我尝试通过索引访问arraylist中的特定书籍时,出现错误。

enter code here

ArrayList Books = new ArrayList();
Book bk1 = new Book();
Books.add(bk1);
System.out.println(Books[0]. --->>> won't give me accesses to the 'Book' class variables (name, pages...)

那么,我怎样才能使它成为类变量呢? 谢谢。

ArrayList是由动态数组支持的java.util.List集合的实现。

这意味着三件事。

首先,您不必担心将元素的大小调整,分配或处理到数组中, ArrayList将为您处理。

其次,任何需要List方法都不关心实现(您可以传递LinkedList ),这会使代码解耦(意味着您可以更改实现而不会对依赖它的人产生不利影响,因为通过List界面)

第三,要与List的内容进行交互,您需要使用一种或多种接口访问方法。

您已经了解了add ,但是要获取对象,您需要使用get which。

返回此列表中指定位置的元素

你也可能对此有兴趣

当然,还有其他方法,但是这些方法立即有用。

我还将通读Collections Trail

更新示例

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {

        List<Book> listOfBooks = new ArrayList<Book>();
        Book bk1 = new Book();
        listOfBooks.add(bk1);

        System.out.println("           bk1 = " + bk1);
        System.out.println("listOfBooks(0) = " + listOfBooks.get(0));

    }

    public class Book {

        String name;
        int pages;
        String auother;
        boolean available;
        String rentername;

        @Override
        public String toString() {
            return "Book: name = " + name + "; pages = " + pages + "; available = " + available + "; rentername = " + rentername + "; hashCode = " + hashCode();
        }

    }
}

哪个输出

           bk1 = Book: name = null; pages = 0; available = false; rentername = null; hashCode = 1137551390
listOfBooks(0) = Book: name = null; pages = 0; available = false; rentername = null; hashCode = 1137551390

使用Listget(int index)方法获取所需的条目:

System.out.println(Books.get(0));

您不能使用用于数组的符号访问List的条目。

顺便说一句:请遵守Java命名约定

您需要创建公共的setter和getter方法来访问字段,并需要访问图书实例

books.get(index)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM