30/09/2018, 18:32

Thắc mắc về thuộc tính kiểu ArrayList?

Mình có class Animal, trong đó có 1 thuộc tính kiểu ArrayList. Vậy thì phần khai báo mình ghi:

private ArrayList<asd> eg;

hay là ghi:

private ArrayList<asd> eg = new ArrayList<asd>();

Và ở hàm khởi tạo, mình có phải new ArrayList trước khi gán 1 tham số kiểu ArrayList vào cho nó không? Nói chung là mình hơi lẫn lộn giữa new trong java và new trong C++…

Nguyen Ca viết 20:38 ngày 30/09/2018

private ArrayList<asd> eg;

private ArrayList<asd> eg = null;

Nên thế cho rõ là mình muốn thế, chỉ cấp phát khi sử dụng :D.

huy vo viết 20:41 ngày 30/09/2018

Vậy là

private ArrayList<SinhVien> list = null;

public ListSV() {
    this.list = new ArrayList<SinhVien>();
}

public ListSV(ArrayList<SinhVien> list) {
    this.list = new ArrayList<SinhVien>();
    this.list = list;
}
Nguyen Ca viết 20:40 ngày 30/09/2018

không đúng em.

public ListSV() {
    this.list = new ArrayList<SinhVien>();
}

không có ý nghĩa gì cả

public ListSV(ArrayList<SinhVien> list) {
    this.list = new ArrayList<SinhVien>();
    this.list = list;
}

Trường hợp này cái list em truyền vào đã được cấp phát, chỉ cần

this.list = list;

Làm như em bộ nhớ sẽ có rác, em tạo ra mà không có dùng gì cả.

huy vo viết 20:41 ngày 30/09/2018
class Animal {
       private ArrayList<someClass> a;
       //
}

main {
        Animal b = new Animal();
        b.getA().add(something); // chỗ này sẽ bị lỗi.
}
Nguyen Ca viết 20:37 ngày 30/09/2018

Lỗi là đúng rồi, thường phải đảm bảo là có dữ liệu trong list e mới get chứ. còn muốn check thì như sau.

public class Animal {
    private ArrayList<String> a = null;

    /**
     * @return the a
     */
    public ArrayList<String> getA() {
        if (a == null) {
            a = new ArrayList<String>();
        }
        return a;
    }

    /**
     * @param a
     *            the a to set
     */
    public void setA(ArrayList<String> a) {
        this.a = a;
    }

}


Bài liên quan
0