0

いくつかの外部関数によって java.io.File インスタンスが提供されますが、そのインスタンスの compareTo のデフォルトの動作をオンザフライで変更したいと考えています。最善のアプローチは何ですか?

私が考えることができる唯一のことは、この File インスタンスを

public class FileWrapper extends File{   

    FileWrapper(File in){
        //Assign var to the global var      
    }

    @Overrides
    public compareTo(File in){ return whatever;}

}

そして、すべてのメソッドがファイルのものをオーバーライドし、呼び出しをコンストラクターを介して渡されたグローバルなラップされたインスタンスに転送しますが、それは非常に醜いです...

多分私は他の簡単な方法を忘れています...

4

1 に答える 1

3

The only reason you might want to use the compareTo method is to sort a collection.

You can always create a Comparator and pass it into a Collections.sort call.

Collections.sort(myList, new Comparator<File>() {
    public int compare(File file1, File file2) {
        // write your custom compare logic here.
    }
});

のようなソート済みコレクションを使用する場合でもTreeSetComparator.

/**
 * Constructs a new, empty tree set, sorted according to the specified
 * comparator.  All elements inserted into the set must be <i>mutually
 * comparable</i> by the specified comparator: {@code comparator.compare(e1,
 * e2)} must not throw a {@code ClassCastException} for any elements
 * {@code e1} and {@code e2} in the set.  If the user attempts to add
 * an element to the set that violates this constraint, the
 * {@code add} call will throw a {@code ClassCastException}.
 *
 * @param comparator the comparator that will be used to order this set.
 *        If {@code null}, the {@linkplain Comparable natural
 *        ordering} of the elements will be used.
 */
public TreeSet(Comparator<? super E> comparator) {
    this(new TreeMap<E,Object>(comparator));
}
于 2012-05-31T09:54:42.713 に答える