0

我有以下代码

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.");
        }

    }
}

这是一个简单的程序,它比较两个元素并相应地将它们设置在 Max_Element 和 Min_Element 中。我有两个问题:

当我写public class SortedPair <E extends Comparable<E>>这是否意味着 SortedPair 只能接收包含 compareTo 方法的可比较元素?

throw new IllegalPair(FirstElement.toString(), SecondElemnt.toString())我使用元素的 toString() 方法创建一个新对象的行中,假设元素没有 toString() 方法,发送的是什么?

谢谢。

4

4 回答 4

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()方法,发送的是什么?

那将使用toStringfromObject,这很无聊。:-) 这就是文档所说的:

类 Object的toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())
于 2013-05-04T08:45:08.280 回答
0

所有对象都有一个从 Object 类继承的 toString 方法。默认实现只显示类名和内部 id。

在实现可比较时,您应该实现 compareTo 方法,以便 x.compareto(y) =-y.compareTo(x) 所以是的,比较对象也应该是可比较的

于 2013-05-04T08:44:02.060 回答
0

如果涉及到泛型子句,SortedPair 确实是继承自 Comparable 的对象类型。

于 2013-05-04T08:45:16.200 回答
0

对于您的第一个问题:E exetends Comparable<E>意味着E必须扩展或实现Comparable(在这种情况下实现,因为Comparable是接口)。Comparable规定每个实现它的类都必须有一个compareTo方法。简而言之:是的,它们必须包含compareTo方法。

对于你的第二个问题:每个没有定义toString方法的类都将继承一个 from Object,它通常看起来像:your.package.YourClass@<somehex>

于 2013-05-04T08:48:59.437 回答