试图限制到数字 class 的上限而不对整个 class 实施 Comparable

Trying to constrain to the upperbound of the Number class without implementing Comparable for the entire class

我正在努力使我的 class 仅受限于上限数字。但是,当我尝试执行 toString() 方法来获取最小值和最大值时,我收到以下消息:

The method largest(ArrayList<T extends Comparable<T>>) in the type MyList is not applicable for the arguments (ArrayList<T extends Number>)

package p07;

import java.util.ArrayList;

public class MyList<T extends Number>
{
    private ArrayList<T> l;

    public MyList(ArrayList<T> l)
    {
        this.l=l;
    }
    public void add(T x)
    {
        l.add(x);
    }
    public static <T extends Comparable<T> > T smallest(ArrayList<T> l)
    {
        T lowest=l.get(0);
        for(T index:l)
        {
            if(index.compareTo(lowest)<0)
            {
                lowest=index;
            }

        }
        return lowest;

    }
    public static <T extends Comparable<T> > T largest(ArrayList<T> l)
    {
        T largest=l.get(0);
        for(T index:l)
        {
            if(index.compareTo(largest)>0)
            {
                largest=index;
            }

        }
        return largest;

    }
    public final String toString()
    {
        String str;
        str="\nThe list is: ";
        str+="\n"+l.toString();
        str+="\nThe largest value is "+MyList.largest(l);
        str+="\nThe smallest value is "+MyList.smallest(l);
        return str;
    }

}

有什么方法可以让我的 class 限制在数字 class 的上限,而不必为整个 class 实现 Comparable 接口?我感觉错误正在发生,因为我的方法是静态的,但我不确定。我只想将 Comparable 用于

smallest()

largest()

这应该有效 --

public class MyList< T extends Number & Comparable<? super T> >

    public static <T extends Comparable<? super T> > T smallest(ArrayList<T> l)

    public static <T extends Comparable<? super T> > T largest(ArrayList<T> l)

您也可以删除所有 ? super 部分;没有通配符应该可以正常工作。

您的 toString 方法依赖于 T 具有您的 class 不强制执行的界限是没有意义的。

类似的事情可以用静态方法来完成。

static <T extends Number & Comparable<? super T>> String getString(MyList<T> list) {
    ....
}