簡體   English   中英

如果對象不具有可比性,如何使方法拋出異常?

[英]How do I make method throw an exception if objects are not comparable?

在這里,您可以看到我想要對兩個列表進行排序的主要方法:使用sortAscending()方法對人和動物進行排序。 人們已經實現了compareTo方法,因此可以比較並使用此方法。 Animal沒有實現compareTo方法。 如果對象無法比較,我想要做的是從sortAscending方法中拋出某種異常。 我怎樣才能做到這一點 ?

public class Main {
    public static void main(final String[] args) {
        ArrayList<Person> people = new ArrayList<Person>();

        Person person1 = new Person("Jonas", 36);
        Person person2 = new Person("Petras", 16);

        people.add(person1);
        people.add(person2);

        ArrayList<Animal> animals = new ArrayList<Animal>();

        Animal animal1 = new Animal("Cat", 3);
        Animal animal2 = new Animal("Dog", 1);

        animals.add(animal1);
        animals.add(animal2);

        System.out.println(Main.sortAscending(people));
        System.out.println(Main.sortAscending(animals));
    }

    public static <T extends Comparable<? super T>> ArrayList<T> sortAscending(
            final ArrayList<T> list) {
        Collections.sort(list);
        return list;
    }
}

public class Person implements Comparable<Person> {
    final String name;
    final int age;

    public Person(final String name, final int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return String.format("{name=%s, age=%d}", name, age);
    }

    @Override
    public int compareTo(final Person person) {
        return this.age < person.age ? -1 : this.age == person.age ? 0 : 1;
    }
}


public class Animal {
    String name;
    int age;

    public Animal(final String name, final int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return String.format("{name=%s, age=%d}", this.name, this.age);
    }
}

只需調用Collections.sort(list); 而不是那種不必要的sortAscending方法。

由於sort的方法簽名 ,調用甚至不會使用包含不實現Comparable元素的列表進行編譯。

但如果你必須拋出異常,

if(!list.isEmpty() && !(list.get(0) instanceof Comparable))
{
   throw new IllegalArgumentException("List cannot be sorted");
}
else {
   Collections.sort(list);
}
Try this

if(list.get(0) != null && !(list.get(0) instanceof Comparable))
{
   throw new Exception();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM