2013-05-09 66 views
10

Xin chào Tôi là một người mới bắt đầu trong Java và đây là câu hỏi của tôi: tôi có lớp học đầu tiên này với các biến sau:Java - Cách truy cập ArrayList của một lớp khác?

import java.util.ArrayList; 

public class numbers { 
    private int number1 = 50; 
    private int number2 = 100; 
} 

Và tôi có lớp này quá:

import java.util.ArrayList; 

public class test { 
    private numbers number; 
} 

Câu hỏi của tôi ở đây là: Tôi muốn lưu sốbiến số 2 vào một ArrayList, sau đó truy cập ArrayList này từ bài kiểm tra lớp. Làm thế nào tôi có thể làm điều đó?

+2

@ alex23 - Tôi không đồng ý. Nó giải quyết một vấn đề lập trình cụ thể, đó là hoàn toàn tốt đẹp cho SO. Căn bản? Vâng. Nhưng tôi không thấy bất cứ điều gì sai trái với nó. –

+1

(** 1 **) Khai báo và khởi tạo 'ArrayList '. Sử dụng phương thức 'add' để đặt' số1' và 'số2' vào đó. (** 2 **) Tạo phương thức 'public Getter' cho ArrayList này. (** 3 **) sử dụng phương thức 'Getter' để truy xuất ArrayList của bạn. –

+0

@ alex23 Mã làm việc? Tôi thực sự đang làm việc trong một dự án với một nhóm thành viên trong lớp, và dự án có giá trị Zero, và nó chẳng liên quan gì đến lớp khoa học máy tính của tôi, đó là điều chúng tôi muốn làm, và nếu nó là một phần của một dự án chúng tôi sẽ không đi cho một trợ giúp trực tuyến, giáo sư của chúng tôi là không ngu ngốc và ông có thể tìm ra nó. Ngoài ra, rất ít thông tin có sẵn về vấn đề này trực tuyến cụ thể. Điều tốt không phải tất cả mọi người giống như bạn, cảm ơn tất cả mọi người khác chúng tôi đã nhận nó. –

Trả lời

17
import java.util.ArrayList; 
public class numbers { 
    private int number1 = 50; 
    private int number2 = 100; 
    private List<Integer> list; 

    public numbers() { 
     list = new ArrayList<Integer>(); 
     list.add(number1); 
     list.add(number2); 
    } 

    public List<Integer> getList() { 
     return list; 
    } 
} 

Và lớp thử nghiệm:

import java.util.ArrayList; 
public class test { 
    private numbers number; 

    //example 
    public test() { 
    number = new numbers(); 
    List<Integer> list = number.getList(); 
    //hurray ! 
    } 
} 

+0

Thông thường, bạn nên sử dụng đối tượng ArrayList thông qua giao diện Danh sách. –

+0

Bạn không truyền các đối tượng đến các triển khai khác nhau. Sử dụng Danh sách làm loại trường và giá trị trả lại cho phép bạn thay đổi triển khai mà không thay đổi mã sử dụng nó. Tốt hơn nên sử dụng giao diện làm giao diện mặc định, trừ khi có yêu cầu cụ thể để sử dụng lớp bê tông, thay vì theo cách khác. –

1

Hai cách

1) nhanh chóng first class và getter cho arrayList

hoặc

2) Hãy ArrayList như static

Và cuối cùng

Java Basics By Oracle

+1

Tôi thích cách tiếp cận đầu tiên. – Maroun

+0

@MarounMaroun yea.me quá. –

3

Bạn có thể làm điều này bằng cách cung cấp trong lớp numbers:

  • Một phương pháp mà trả về đối tượng ArrayList riêng của mình.
  • Phương thức trả về trình bao bọc không thể sửa đổi của ArrayList. Điều này ngăn không cho sửa đổi danh sách mà không có kiến ​​thức về số lớp.
  • Phương pháp cung cấp tập hợp các hoạt động bạn muốn hỗ trợ từ số lớp. Điều này cho phép các số lớp kiểm soát bộ hoạt động được hỗ trợ.

Bằng cách này, có một quy ước mạnh mẽ rằng tên lớp Java được viết hoa.

Trường hợp 1 (getter đơn giản):

public class Numbers { 
     private List<Integer> list; 
     public List<Integer> getList() { return list; } 
     ... 
} 

Trường hợp 2 (wrapper không thể thay đổi được):

public class Numbers { 
     private List<Integer> list; 
     public List<Integer> getList() { return Collections.unmodifiableList(list); } 
     ... 
} 

Trường hợp 3 (phương pháp cụ thể):

public class Numbers { 
     private List<Integer> list; 
     public void addToList(int i) { list.add(i); } 
     public int getValueAtIndex(int index) { return list.get(index); } 
     ... 
} 
+0

Trong trường hợp thứ 3, sẽ hữu ích khi nói với người khác về kích thước của danh sách, để họ không cố gắng truy cập các phần tử vượt quá kích thước của nó, có thể là phương thức 'getSize'? Ngoài ra thay vì danh sách unmodifiable bạn chỉ có thể trả lại bản sao của nó. – user5539357

+0

@ user5539357 - Có, trong trường hợp 3, 'size()' sẽ hữu ích. Tuy nhiên, trong trường hợp 2, trả về một dạng xem không thể sửa đổi của danh sách là O (1), trong khi sao chép sẽ là O (n). Việc thực hiện ở trên để lại sự lựa chọn và chi phí sao chép lên đến người gọi. –

3

Bạn có thể làm như sau:

public class Numbers { 
    private int number1 = 50; 
    private int number2 = 100; 
    private List<Integer> list; 

    public Numbers() { 
     list = new ArrayList<Integer>(); 
     list.add(number1); 
     list.add(number2); 
    } 

    int getNumber(int pos) 
    { 
     return list.get(pos); 
    } 
    } 

    public class Test { 
    private Numbers numbers; 

    public Test(){ 
     numbers = new Numbers(); 
     int number1 = numbers.getNumber(0); 
     int number2 = numbers.getNumber(1); 
    } 
    } 
1

Đặt chúng trong một ArrayList trong lớp học đầu tiên của bạn như:

import java.util.ArrayList; 
public class numbers { 
private int number1 = 50; 
private int number2 = 100; 

public ArrayList<int> getNumberList() { 
ArrayList<int> numbersList= new ArrayList<int>(); 
numbersList.add(number1); 
numberList.add(number2); 
.... 
return numberList; 

} 
} 

Sau đó, trong lớp kiểm tra của bạn, bạn có thể gọi numbers.getNumberList() để lấy arrayList của bạn. Ngoài ra, bạn có thể muốn tạo các phương thức như addToList/removeFromList trong lớp số của bạn để bạn có thể xử lý nó theo cách bạn cần.

Bạn cũng có thể truy cập vào một biến khai báo trong một lớp học từ đơn giản khác như

numbers.numberList; 

nếu bạn có nó tuyên bố đó như nào.

Nhưng nó không phải là một thực hành tốt như vậy theo ý kiến ​​của tôi, vì bạn có thể cần phải sửa đổi danh sách này trong mã của bạn sau này. Lưu ý rằng bạn phải thêm lớp học của mình vào danh sách nhập.

Nếu bạn có thể cho tôi biết yêu cầu ứng dụng của bạn là gì, tôi sẽ có thể cho bạn biết chính xác hơn những gì tôi nghĩ tốt nhất nên làm.

Các vấn đề liên quan