30/09/2018, 20:29

Hỏi về kiểu Type... trong java?

Có đọc tài liệu có đoạn code class Mảng phân số như sau. Cho mình hỏi trong đoạn code bên dưới cách viết PhanSo… là như thế nào?(Có thử khởi tạo dạng mảng thì build thành công nhưng không hiểu ý nghĩa chỗ PhanSo…).

public class MangPhanSo {
    private PhanSo[] arr;
    public MangPhanSo(){
        this.arr = null;
    }
    //Phương thức khởi tạo có tham số
    public MangPhanSo(PhanSo... arr)
    {
        this.arr = new PhanSo[arr.length];
        for(int i = 0; i < arr.length; i++)
        {
            this.arr[i] = new PhanSo(arr[i]);
        }
    }
}
vũ xuân quân viết 22:45 ngày 30/09/2018

PhanSo

bạn đã học hướng đối tượng chưa ?
cái này là class PhanSo.
Trong code này người ta đã xây dựng sẵn class phân số.
Code này bạn lấy trên mạng phải không ?

Ngô Doãn Tuấn viết 22:37 ngày 30/09/2018

private PhanSo[] arr;

Ở phần này thì PhanSo là một đối tượng đã đượng tạo từ trước có chứa các thuộc tính và phương thức. Nên có thể làm như vậy.
Bạn có thể tham khảo vào Hướng đối tượng để hiểu rõ vấn đề này hơn

NhatTa viết 22:31 ngày 30/09/2018

@TheSky @masoivn mấy bác hiểu nhầm ý rồi. Hướng đối tượng này nọ thì mình hiểu rồi có class PhanSo riêng mình không đưa code lên. Ý mình là ý nghĩa của cách viết: PhanSo… hoặc int… thấy cách dùng giống mảng 1 chiều mà không rõ cách dùng này ở đâu ra

Van Huong viết 22:44 ngày 30/09/2018

cái đó gọi là Varargs, cú pháp này được giới thiệu từ Java 5. Có thể tham khảo bài viết này http://viralpatel.net/blogs/varargs-in-java-variable-argument-method-in-java-5/. Good luck!

NhatTa viết 22:29 ngày 30/09/2018

yeah.đúng rồi cảm ơn chú.hehe.

vũ xuân quân viết 22:29 ngày 30/09/2018

this.arr[i] = new PhanSo(arr[i]);

vậy sao có đoạn khởi tạo như vậy ?

NhatTa viết 22:42 ngày 30/09/2018

Đoạn đó chỉ là phép gán bình thường của phần tử thứ i cho một phân số thôi. Ở đây new PhanSo(arr[i]) là phương thức khởi tạo sao chép của lớp Phân số thôi. Do mình thắc mắc cú pháp: Type… là cách khai báo nhiều biến kiểu nối tiếp nên ko post hết code
code lớp phân số:

public class PhanSo {
    //Khai báo các thuộc tính
    private int tuSo;
    private int mauSo;
    //Phương thức khởi tạo mặc định
    public PhanSo(){
        this.tuSo = 1;
        this.mauSo = 2;
    }

    //Phương thức khởi tạo đầy đủ tham số
    public PhanSo(int tuSo, int mauSo)
    {
        this.tuSo = tuSo;
        this.mauSo = mauSo;
    }
    
    //Phương thức khởi tạo sao chép
    public PhanSo(PhanSo ps)
    {
        this.tuSo = ps.tuSo;
        this.mauSo = ps.mauSo;
    }
    
    //Các phương thức get/set
    public int getTuSo()
    {
        return tuSo;
    }
    
    public void setTuSo(int tuSo){
        this.tuSo = tuSo;
    }
    
    public int getMauSo()
    {
        return mauSo;
    }
    
    public void setMauSo(int mauSo)
    {
        if(mauSo != 0)
            this.mauSo = mauSo;
    }
}
Bài liên quan
0