Java超类和子类扩展

Java超类和子类扩展,java,sorting,subclass,superclass,Java,Sorting,Subclass,Superclass,我在做这个任务,我们必须创建两种类型的对象 public class Person implements Cloneable, Comparable<Person> 因此,我在主函数中创建了2个ListArray,如下所示,以存储book和person对象,如下所示: compareTo(Person o) compareTo(Book o) List<Book> bookArray = new ArrayList<Book>(); List<Per

我在做这个任务,我们必须创建两种类型的对象

public class Person implements Cloneable, Comparable<Person>
因此,我在主函数中创建了2个ListArray,如下所示,以存储book和person对象,如下所示:

compareTo(Person o)
compareTo(Book o)
List<Book> bookArray = new ArrayList<Book>();
List<Person> peopleArray = new ArrayList<Person>();
public class Sort{
Comparable<Object>[] values;
public Sort(List<Object> inputArray) {
  this.values = (Comparable<Object>[]) inputArray.toArray();
}
public doSort() {
  //sort implementation...
}
Eclipse显示错误,表示“构造函数排序(列表)未定义” 我做错了什么?
提前谢谢。

您可以将任何类实例传递给对象类型。但List不是List的父级。这只是两种不同的类型

你可以说

public Sort(List<? extends Object> inputArray) 

public Sort(List您可以将任何类实例传递给对象类型。但List不是List的父类。它们只是两种不同的类型

你可以说

public Sort(List<? extends Object> inputArray) 
public Sort(List仅仅因为您将字段命名为“personArray”并不会使其成为数组-当构造函数声明为需要数组时,您正在传入一个
List

我建议您永远不要使用数组,除非您必须这样做;而是使用集合,因为它们更容易处理,而且与流行的观点相反,性能差异可以忽略不计

如果您从代码中删除所有数组,并添加一些泛型,那么所有这些都可以工作:

public class Sort<T extends Comparable<T>> {
    private List<T> values;

    public Sort(List<T> values) {
        this.values = values;
    }

    public void doSort() {
        Collections.sort(values);
    }
}
仅仅因为您将字段命名为“personArray”并不使其成为数组——当构造函数声明为需要数组时,您正在传递一个
列表

我建议您永远不要使用数组,除非您必须这样做;而是使用集合,因为它们更容易处理,而且与流行的观点相反,性能差异可以忽略不计

如果您从代码中删除所有数组,并添加一些泛型,那么所有这些都可以工作:

public class Sort<T extends Comparable<T>> {
    private List<T> values;

    public Sort(List<T> values) {
        this.values = values;
    }

    public void doSort() {
        Collections.sort(values);
    }
}

它不是很清楚,但如果我是对的,当您使用另一个新类进行排序时,可能是实现了COMPARATOR

所以在我们的示例中,Sort类应该是

Class Sort implemets Comaparator<Person> {
public void Compare(Object 01,Object 02) {
 return (Person)o1.comapareTo(Person)o2;
}

你也需要为这本书做些什么。

不太清楚,但如果我是对的,当你使用另一个新类进行排序时,它可能是COMPARATOR

所以在我们的示例中,Sort类应该是

Class Sort implemets Comaparator<Person> {
public void Compare(Object 01,Object 02) {
 return (Person)o1.comapareTo(Person)o2;
}

你也需要为这本书做些什么。

公共类排序扩展{
扩展什么?很抱歉,它没有扩展任何“适当”的内容实现这一点的方法是使用泛型,但除此之外,如果在将peopleArray传递给构造函数时将其强制转换为List,会发生什么情况?它会抱怨。我需要执行
List peopleArray=ArrayList;
公共类排序扩展{
扩展什么?抱歉,它没有扩展任何“正确”的内容实现这一点的方法是使用泛型,但除此之外,如果在将peopleArray传递给构造函数时将其强制转换为List,会发生什么情况?它会抱怨。我需要执行
List peopleArray=ArrayList;
Ok。它解决了类型问题,因此程序可以正常运行。但是,当它运行到构造函数时会引发异常或
public Sort(ListOk)。它解决了类型问题,因此程序可以正常运行。但是,当它运行到
public Sort(List)的构造函数时,会引发异常
Collections.sort(list,new Sort());