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

    }
}

2 つの要素を比較し、それに応じて Max_Element と Min_Element に設定する単純なプログラムです。2 つの質問があります。

私が書いたときpublic class SortedPair <E extends Comparable<E>>、それはSortedPairがcompareToメソッドを含む同等の要素のみを受け取ることができるということですか?

要素の toString() メソッドを使用して新しいオブジェクトを作成する行throw new IllegalPair(FirstElement.toString(), SecondElemnt.toString())で、要素に toString() メソッドがないとします。送信されるのは何ですか?

ありがとう。

4

4 に答える 4

2

When I write public class SortedPair <E extends Comparable<E>> does that mean that SortedPair can receive only comparable elements which contains the compareTo method?

It means that you can only use something that implements Comparable as the type argument, e.g.:

SortedPair<String> sp;
//         ^--- this must be a class that implements `Comparable`
//              or an interface that extends `Comparable`

...which in turn means you can use the methods defined by Comparable on any instances declared with your generic type E.

In the line throw new IllegalPair(FirstElement.toString(), SecondElemnt.toString()) I create a new object using the toString() method of the elements, lets say the elements don't have a toString() method, what is being send?

That will use the toString from Object, which is pretty boring. :-) This is what the docs say it will do:

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

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

すべてのオブジェクトには、Object クラスから継承された toString メソッドがあります。デフォルトの実装では、クラス名と内部 ID のみが表示されます。

比較可能なものを実装する場合は、x.compareto(y) =-y.compareTo(x) となるように compareTo メソッドを実装する必要があるため、比較対象のオブジェクトも比較可能なものにする必要があります

于 2013-05-04T08:44:02.060 に答える
0

If it comes to generic clause, indeed SortedPair would be of type of objects that inherit from Comparable.

于 2013-05-04T08:45:16.200 に答える
0

あなたの最初の質問に:拡張または実装する必要がE exetends Comparable<E>あることを意味します(この場合は、インターフェイスであるため実装します)。それを実装するすべてのクラスにはメソッドが必要です。つまり、はい、メソッドが含まれている必要があります。EComparableComparableComparablecompareTocompareTo

2 番目の質問: メソッドを定義していないすべてのクラスは、toStringからメソッドを継承しますObject。これは通常、次のようになります。your.package.YourClass@<somehex>

于 2013-05-04T08:48:59.437 に答える