Tài liệu tham khảo bài giảng lập trình java - Lê Đình Thanh , bộ môn mạng và truyền thông máy tính , khoa công nghệ thông tin - Bài 05 Kiểu chung
Bài giảng LẬP TRÌNH JAVA Lê ðình Thanh Bộ mơn Mạng Truyền thơng Máy tính Khoa Cơng nghệ Thơng tin Trường ðại học Cơng nghệ, ðHQGHN Lê ðình Thanh, Kiểu chung Bài Kiểu chung 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 xun gặp q trình phát triển phần mềm, chia làm hai loại: • • Lỗi dịch (compile-time bugs): Các trình dịch lỗi lập trình viên phải sửa (debug) trước phần mềm chạy Lỗi chạy (runtime bugs): Lỗi khơng thể phát ñược dịch mà ñược phát chạy • Một nguyên nhân gây lỗi chạy sử dụng SAI KIỂU • Kiểu tổng quát ñược ñưa vào java nhằm phát lỗi sử dụng sai kiểu dịch Lê ðình Thanh, Kiểu chung Ví dụ lỗi 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 sử dụng tham số • public class Box { …} Box abox = new Box(); Lê ðình Thanh, Kiểu chung Phát 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); } } Lê ðình Thanh, Kiểu chung BoxDemo3.java:5: add(java.lang.Integer) in Box cannot be applied to (java.lang.String) abox.add("10"); ^ error 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 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"); ^ error Lê ðình Thanh, Kiểu chung Tiếp theo Các lớp thiết yếu Lê ðình Thanh, Kiểu chung ... 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 xun gặp q trình phát triển phần mềm, chia làm hai loại: • • Lỗi dịch (compile-time... System.out.println(anotherbox); } } Lê ðình Thanh, Kiểu chung BoxDemo3 .java: 5: add (java. lang.Integer) in Box cannot be applied to (java. lang.String) abox.add("10"); ^ error Phương thức chung... 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