NỘI DUNG BÀI VIẾT
Mục tiêu
Luyện tập thiết kế và triển khai interface.
Điều kiện
Biết cách thiết kế và triển khai interface.
Mô tả
Ở bài thực hành trước đã tiến hành cho các lớp hình học triển khai interface Comparable
để hỗ trợ so sánh “hơn, kém, bằng”.
Phương án này không phù hợp khi mà vì lý do gì đó, không thể thay đổi các lớp đã có sẵn, cũng như không thể tùy ý tạo ra và sử dụng các lớp kế thừa mới.
Trong trường hợp đó, ta có thể sử dụng những đối tượng thuộc những lớp mà có triển khai interface Comparator
và phương thức compare()
của nó, để phục phụ việc so sánh, như hướng dẫn dưới đây.
Mã cho các lớp hình học có thể tham khảo tại repository này.
Gợi ý triển khai một Comparator
có khả năng so sánh các Circle
Học viên tự triển khai Comparator
cho các lớp hình học còn lại.
Hướng dẫn
Bước 1: Tạo một lớp CircleComparator
triển khai interface Comparator
:
import java.util.Comparator; public class CircleComparator implements Comparator<Circle> { @Override public int compare(Circle c1, Circle c2) { if (c1.getRadius() > c2.getRadius()) return 1; else if (c1.getRadius() < c2.getRadius()) return -1; else return 0; } }
Bước 2: Tạo chương trình để kiểm thử CircleComparatorTest
:
import java.util.Arrays; import java.util.Comparator; public class CircleComparatorTest { public static void main(String[] args) { Circle[] circles = new Circle[3]; circles[0] = new Circle(3.6); circles[1] = new Circle(); circles[2] = new Circle(3.5, "indigo", false); System.out.println("Pre-sorted:"); for (Circle circle : circles) { System.out.println(circle); } Comparator circleComparator = new CircleComparator(); Arrays.sort(circles, circleComparator); System.out.println("After-sorted:"); for (Circle circle : circles) { System.out.println(circle); } } }
Hướng dẫn nộp bài:
Up bài lên github
Paste link github vào phần nộp bài
Tham khảo mã nguồn tại repository này