[英]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.