Tôi luôn thấy rằng câu lệnh chuyển đổi java không mạnh mẽ như tôi cần. Trong số last release lambdaj implements it của bạn với cách sử dụng thông minh là đóng cửa và khớp nối Hamcrest.
Ví dụ: lambdaj Switcher cho phép triển khai mẫu chiến lược. Giả sử bạn phải chuyển đổi giữa ba thuật toán sắp xếp dựa trên một số đặc tính của danh sách cần sắp xếp. Đặc biệt chúng ta hãy giả sử chúng ta đã một thuật toán chuyên cho Strings:
public List<String> sortStrings(List<String> list) {
// a sort algorithm suitable for Strings
}
một số khác hoạt động tốt với danh sách nhỏ không có hơn 100 mặt hàng:
public List<T> sortSmallList(List<T> list) {
// a sort algorithm suitable for no more than 100 items
}
và tổng quát hơn mục đích một:
public List<String> sort(List<String> list) {
// a generic sort algorithm
}
Với 3 phương pháp sắp xếp này, bạn có thể tạo chiến lược lựa chọn phương pháp phù hợp nhất theo cách khai báo sau:
Switcher<List<T>> sortStrategy = new Switcher<List<T>>()
.addCase(having(on(List.class).get(0), instanceOf(String.class))),
new Closure() {{ of(this).sortStrings(var(List.class)); }})
.addCase(having(on(List.class).size(), lessThan(100))),
new Closure() {{ of(this).sortSmallList(var(List.class)); }})
.setDefault(new Closure() {{ of(this).sort(var(List.class)); }});
và sắp xếp một danh sách bằng cách sử dụng thuật toán tốt nhất hiện có bằng cách gọi các Switcher:
List<T> sortedList = sortStrategy.exec(list, list);
Nguồn
2010-03-28 13:59:34
Khi bạn không muốn peeve-off các nhà phát triển bên cạnh những người có để duy trì mã của bạn 100x nếu/báo cáo khác. –
Tôi không biết ... Tôi nghĩ rằng tôi sẽ chỉ là khó chịu bởi 100 trường hợp trong một chuyển đổi. :-) Mùi giống như thiết kế xấu. – cjstehno
Luôn luôn vì tốc độ nhanh hơn: http://stackoverflow.com/questions/2086529 –