试图限制到数字 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) {
....
}
我正在努力使我的 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) {
....
}