Bài giảng Lập trình Java - Bài 5: Kiểu chung
Lỗi lập trình (bug), thường xuyên gặp trong quá trình phát
triển phần mềm, ñược chia làm hai loại:
• Lỗi khi dịch (compile-time bugs): Các trình dịch có thể chỉ ra
các lỗi này và lập trình viên phải sửa (debug) trước khi phần
mềm chạy ñược.
• Lỗi khi chạy (runtime bugs): Lỗi không thể phát hiện ñược
khi dịch mà chỉ ñược phát hiện khi chạy.
• Một trong những nguyên nhân gây lỗi khi chạy là sử dụng SAI
KIỂU.
• Kiểu tổng quát ñược ñưa vào java nhằm phát hiện các lỗi sử dụng
sai kiểu ngay khi dịch.
Lê ðình Thanh, Kiểu chung Lê ðình Thanh Bộ môn Mạng và Truyền thông Máy tính Khoa Công nghệ Thông tin Trường ðại học Công nghệ, ðHQGHN Bài giảng LẬP TRÌNH JAVA Lê ðình Thanh, Kiểu chung Kiểu chung Bài 5 Lê ðình Thanh, Kiểu chung Nội dung • Các lỗi lập trình • Kiểu chung • Phương thức chung Lê ðình Thanh, Kiểu chung Lỗi lập trình • Lỗi lập trình (bug), thường xuyên gặp trong quá trình phát triển phần mềm, ñược chia làm hai loại: • Lỗi khi dịch (compile-time bugs): Các trình dịch có thể chỉ ra các lỗi này và lập trình viên phải sửa (debug) trước khi phần mềm chạy ñược. • Lỗi khi chạy (runtime bugs): Lỗi không thể phát hiện ñược khi dịch mà chỉ ñược phát hiện khi chạy. • Một trong những nguyên nhân gây lỗi khi chạy là sử dụng SAI KIỂU. • Kiểu tổng quát ñược ñưa vào java nhằm phát hiện các lỗi sử dụng sai kiểu ngay khi dịch. Lê ðình Thanh, Kiểu chung Ví dụ về lỗi khi chạy public class Box { private Object object; public void add(Object object) { this.object = object; } public Object get() { return object; } } public class BoxDemo1 { public static void main(String[] args) { Box abox = new Box(); abox.add("10"); Integer anotherbox = (Integer) abox.get(); System.out.println(anotherbox ); } } Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at BoxDemo1.main(BoxDemo1.java:6) Lê ðình Thanh, Kiểu chung Kiểu chung – Generic Type public class Box { private T object; public void add(T object) { this.object = object; } public T get() { return object; } } public class BoxDemo2 { public static void main(String[] args) { Box abox = new Box(); abox.add(new Integer(10)); Integer anotherbox = abox.get(); System.out.println(anotherbox); } } Lê ðình Thanh, Kiểu chung Kiểu chung • Kiểu ñược sử dụng như một tham số public class Box { …} Box abox = new Box(); Lê ðình Thanh, Kiểu chung Phát hiện lỗi nhờ kiểu chung public class Box { private T object; public void add(T object) { this.object = object; } public T get() { return object; } } public class BoxDemo3 { public static void main(String[] args) { Box abox = new Box(); abox.add("10"); Integer anotherbox = (Integer) abox.get(); System.out.println(anotherbox); } } BoxDemo3.java:5: add(java.lang.Integer) in Box cannot be applied to (java.lang.String) abox.add("10"); ^ 1 error Lê ðình Thanh, Kiểu chung Phương thức chung • Là phương thức có tham số kiểu chung public void inspect(U u){ System.out.println("U: " + u.getClass().getName()); } public static void fillBoxes(U u, List> boxes) { for (Box box : boxes) { box.add(u); } } Crayon red = ...; List> crayonBoxes = ...; Box.fillBoxes(red, crayonBoxes); //hoặc Box.fillBoxes(red, crayonBoxes); Lê ðình Thanh, Kiểu chung Tham số kiểu ñược giới hạn • Là phương thức có tham số kiểu chung public void inspect(U u){ System.out.println("U: " + u.getClass().getName()); } abox.inspect("some text"); Box.java:21: inspect(U) in Box cannot be applied to (java.lang.String) abox.inspect(“some text"); ^ 1 error Lê ðình Thanh, Kiểu chung Tiếp theo Các lớp thiết yếu
File đính kèm:
- Bài giảng Lập trình Java - Bài 5_Kiểu chung.pdf