2012-10-09 480 views
1

所以,讓我們說我有一個類來描述一本書訪問對象類變量的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...) 

那麼,我怎樣才能使它的類變量? 謝謝。

回答

11

ArrayListjava.util.List集通過動態數組支持的實現。

這意味着三件事。

首先,您不需要擔心調整大小,分配元素或將元素應用到陣列中,ArrayList會爲您處理。其次,任何想要List的方法都不關心實現(你可以改爲傳遞一個LinkedList)來解耦代碼(這意味着你可以改變實現而不影響那些依賴它的人,因爲合同通過List接口進行)

第三,要與List的內容進行交互,您需要使用一個或多個接口的訪問方法。

您已經知道add,但要獲取對象,您需要使用get其中;

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

您可能也有興趣

還有其他的方法,當然,但這些是直接有用的。

我也有一個通過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 
+0

當我使用getmethood時,我無法獲得書本對象varibable(名稱,頁面等)......我只能查看通用對象方法,如qeuals/get class/HashCode ... – user3921

+0

第一個問題你使用的是'List'的vanellia版本,它接受任何類型的Object,但只返回一個Object,你可以通過1.將結果轉換回一個'Book'( 'Book book =(Book)Books.get(0)'),但這是危險的,應該儘量避免。2.利用'泛型',這基本上限制'List'只處理某些類型的' Objects'。我已經用示例更新了我的帖子,但您可能希望閱讀[Generics Trail](http://docs.oracle.com/javase/tutorial/java/generics/)以獲取更多信息 – MadProgrammer

2

您需要創建公共getter和setter方法的方法來訪問領域,並訪問您需要

books.get(index) 
+0

或者,對於純數據類閱讀,它可能是罰款,使公開的領域。除非他們進行邊界檢查或其他驗證,否則訪問器和變體只是這種類的樣板。 – jpm

+0

accessor可以在未來使用還有很多框架可能會尋找訪問者,如果對他們使用 –

6

使用的Listget(int index)方法來得到你想要的入門書實例:

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

您不能使用用於數組的符號訪問List的條目。

BTW:請堅持Java Naming Conventions

+0

當我使用得到methood,我無法得到accsess書對象varibable(名稱,網頁等...我可以只能查看通用對象方法,如qeuals/get class/HashCode ... – user3921

+0

@ user3921當然,你不能這樣做,它們既不是公有的,也沒有getter/setter方法,改變/添加它們,你就可以 – Baz

+0

嘿,即時通訊對不起我的朋友,但加入公衆並沒有解決它,我甚至附上了一張照片,讓你們看到... http://i45.tinypic.com/wtswj.jpg – user3921