2013-03-08 40 views
10

Tôi đang tạo một lớp tùy chỉnh thực hiện so sánh và tôi muốn ném một loại ngoại lệ nếu ai đó cố gắng so sánh hai đối tượng không thể so sánh được với định nghĩa của tôi. Có một ngoại lệ thích hợp đã có trong API, hay tôi cần phải làm cho riêng của tôi?java "không thể so sánh" ngoại lệ?

Trả lời

8

Không phải là tôi biết.

Các ngoại lệ chính xác nhất để miêu tả này có lẽ là một IllegalArgumentException: http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html

Bạn nên có lẽ cũng được thực hiện Comparable<CustomClass> mà sẽ ngăn chặn những người gọi từ việc cung cấp một thể hiện của lớp sai.

+0

+1 cho giao diện 'So sánh '. –

2

Xem xét ClassCastException, đó là những gì Java Collection Framework ném cho các tình huống như vậy. Đây là điều xảy ra khi chúng tôi cố gắng thêm Test1 không thể so sánh vào TreeSet

Exception in thread "main" java.lang.ClassCastException: Test1 cannot be cast to java.lang.Comparable 
    at java.util.TreeMap.compare(TreeMap.java:1188) 
    at java.util.TreeMap.put(TreeMap.java:531) 
    at java.util.TreeSet.add(TreeSet.java:255) 
    at java.util.AbstractCollection.addAll(AbstractCollection.java:334) 
    at java.util.TreeSet.addAll(TreeSet.java:312) 
    at java.util.TreeSet.<init>(TreeSet.java:160) 
    at Test1.main(Test1.java:9) 
+0

+1 cho ClassCastException. Điều này được tham chiếu trong compareTo javadoc: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-. Nhưng lý tưởng, như Cory Kendall đã nói ở trên, bạn nên cố gắng tìm ra một hệ thống phân cấp lớp để ngăn chặn điều này. – philo