java将toString()传递给方法

时间:2013-05-04 08:37:56

标签: java generics tostring

我有以下代码

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

感谢。

4 个答案:

答案 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>