Java 接收可比较对象[]时找不到compareTo

Java 接收可比较对象[]时找不到compareTo,java,compareto,Java,Compareto,问题是该方法不确定a和b是否可比较,因此编译器会抛出一个找不到的符号进行比较 public class Merge { public ArrayList<Object> sorted(Object[] a, Object[] b) { int i, j, k; i = j = k = 0; ArrayList<Object> c = new ArrayList<>(); while (i

问题是该方法不确定a和b是否可比较,因此编译器会抛出一个找不到的符号进行比较

public class Merge {
    public ArrayList<Object> sorted(Object[] a, Object[] b) {

        int i, j, k;
        i = j = k = 0;
        ArrayList<Object> c = new ArrayList<>();
        while (i < a.length || j < b.length) {
            if (i == a.length) {
                for (j = j; j < b.length; j++) {
                    c.add(k, b[j]);
                    k++;
                }
                break;
            }
            else if (j == b.length) {
                for (i = i; i < a.length; i++) {
                    c.add(k, a[i]);
                    k++;
                }
                break;
            }
            else {
                if ( a[i].equals(b[j]) || a[i].compareTo(b[j]) < 0 ) {
                    c.add(k, a[i]);
                    i++;
                    k++;
                }
                else {
                    c.add(k, b[j]);
                    j++;
                    k++;
                }
            }
        }
        return c;
    }
}
公共类合并{
已排序的公共阵列列表(对象[]a,对象[]b){
int i,j,k;
i=j=k=0;
ArrayList c=新的ArrayList();
而(i
该代码在与Integer一起使用时有效。我希望能够使用例如,
sorted(a,b)
being
a=Person[]
b=Person[]
。当然,在人的内部,方法是比较和平等的


我是否应该在该类中实现并扩展comparable,并使用ObjectType覆盖compareTo?

我建议您将签名更改为

public static <T extends Comparable<T>> List<T> sorted(T[] a, T[] b)
已排序的公共静态列表(T[]a,T[]b)

您将能够比较a[i]。比较到(b[i])
,并返回相应类型的列表。

我建议您将签名更改为

public static <T extends Comparable<T>> List<T> sorted(T[] a, T[] b)
已排序的公共静态列表(T[]a,T[]b)
您将能够比较
a[i].compareTo(b[i])
并返回相应类型的列表。

要在对象上调用
compareTo()
,类必须实现
compareTo
接口并重写
compareTo()
方法。由于
对象
类未实现
可比
,上述代码将始终给您提供编译错误

如果只想传递Person对象,则需要将签名更改为接受
Person[]
数组。否则,您需要重写toString()方法(使用有意义的实现)并将
a[i].compareTo(b[j])
更改为
a[i].toString().compareTo(b[j].toString())
要在对象上调用
compareTo()
,类必须实现
Comparable
接口并重写
compareTo()
方法。由于
对象
类未实现
可比
,上述代码将始终给您提供编译错误


如果只想传递Person对象,则需要将签名更改为接受
Person[]
数组。否则,您需要重写toString()方法(使用有意义的实现)并将
a[i].compareTo(b[j])
更改为
a[i].toString().compareTo(b[j].toString())

嘿,谢谢您的帮助!我可以在签名中使用ArrayList吗?你能解释一下为什么你建议使用这个签名或者我应该研究什么主题吗?嘿,谢谢你的帮助!我可以在签名中使用ArrayList吗?你能解释一下为什么你建议使用这个签名或者我应该研究什么主题吗?