我有以下代码
public class Mamman14 {
public static void main(String[] args) {
// TODO code application logic here
}
public class SortedPair < E extends Comparable < E >> {
E Max_Element;
E Min_Element;
public SortedPair(E FirstElement, E SecondElemnt) throws IllegalPair {
int Compare_Result = FirstElement.compareTo(SecondElemnt);
if (Compare_Result == 0) {
Max_Element = null;
Min_Element = null;
throw new IllegalPair(FirstElement.toString(), SecondElemnt.toString());
} else if (Compare_Result > 0) {
Max_Element = FirstElement;
Min_Element = SecondElemnt;
} else {
Max_Element = SecondElemnt;
Min_Element = FirstElement;
}
}
public E getFirst() {
return Max_Element;
}
public E getSecond() {
return Min_Element;
}
@
Override
public String toString() {
return String.format("%s is bigger then %s.", getFirst(), getSecond());
}
}
public class IllegalPair extends Exception {
public IllegalPair() {
super("Elements must be different!!");
}
public IllegalPair(String Element) {
super("Elements must be different!! \n However they are equal to " + Element);
}
public IllegalPair(String Element1, String Element2) {
super("Elements must be different!! \n However the elements are " + Element1 + "and" +
Element2 + "and they are equal.");
}
}
}
这是一个简单的程序,它比较2个元素并相应地在Max_Element和Min_Element中设置它们。 我有两个问题:
当我写public class SortedPair <E extends Comparable<E>>
时,这意味着SortedPair只能接收包含compareTo方法的可比元素吗?
在行throw new IllegalPair(FirstElement.toString(), SecondElemnt.toString())
中我使用元素的toString()方法创建一个新对象,假设元素没有toString()方法,正在发送什么?
感谢。
答案 0 :(得分:2)
当我写公共课
SortedPair <E extends Comparable<E>>
时,这是否意味着SortedPair
只能接收包含compareTo
方法的可比元素?
这意味着你只能使用实现Comparable
的东西作为类型参数,例如:
SortedPair<String> sp;
// ^--- this must be a class that implements `Comparable`
// or an interface that extends `Comparable`
...这反过来意味着您可以在使用通用类型Comparable
声明的任何实例上使用E
定义的方法。
在行
throw new IllegalPair(FirstElement.toString(), SecondElemnt.toString())
中,我使用元素的toString()方法创建一个新对象,假设元素没有toString()
方法,正在发送什么?
那会使用toString
from Object
,这很无聊。 :-)这是文档所说的:
类Object的
toString
方法返回一个字符串,该字符串由对象为实例的类的名称,at符号字符“@”和散列码的无符号十六进制表示形式组成。物体。换句话说,此方法返回一个等于值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
答案 1 :(得分:0)
所有对象都有一个从Object类继承的toString方法。默认实现只显示classname和内部id。
当实现可比较时,你应该实现compareTo方法,以便x.compareto(y)= -y.compareTo(x)所以是比较对象也应该是可比较的
答案 2 :(得分:0)
如果涉及泛型子句,那么SortedPair确实是从Comparable继承的对象类型。
答案 3 :(得分:0)
关于第一个问题:E exetends Comparable<E>
表示E
必须扩展或实施Comparable
(在这种情况下实现,因为Comparable
是一个接口)。 Comparable
规定实现它的每个类都必须有compareTo
方法。简而言之:是的,它们必须包含compareTo
方法。
对于您的第二个问题:每个未定义toString
方法的类都将继承Object
中的一个,通常看起来像这样:your.package.YourClass@<somehex>