2013-05-04 74 views
0

我有以下代码java的传递的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()方法,什么是发送?

谢谢。

+0

这是最好问* *一个问题,每一个问题:每一个没有定义toString方法将继承Object之一,它通常游戏看起来像类。 – 2013-05-04 08:43:43

+0

下次会再做谢谢 – user2102697 2013-05-04 10:46:49

回答

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方法返回一个包含其中的对象是一个实例,在 - 标记字符'之类的名称的字符串@ ',以及对象的哈希码的无符号十六进制表示。换句话说,该方法返回一个字符串等于值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 
+0

所以我想没有理由用前两个构造函数重载IllegalPair,对吧?谢谢。 – user2102697 2013-05-04 10:40:52

+0

@ user2102697:如果你只使用两个字符串构造'IllegalPair',那么你不需要前两个构造函数。 – 2013-05-04 11:01:04

0

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

当实现可比你应该implent compareTo方法,这样则x.compareTo(Y)= -y.compareTo(X)所以是比较对象也应该是相当

0

如果涉及到通用条款,确实SortedPair将类型可比继承的对象的。

0

第一个问题:E exetends Comparable<E>意味着E必须扩展或实现Comparable(实现此情况下,由于Comparable是一个接口)。 Comparable指示每个实现它的类必须有compareTo方法。简而言之:是的,他们必须包含compareTo方法。

你的第二个问题:[email protected]<somehex>