Naturalny porządek komparatora

0

Mając klasę:

public class MyClass<T> {
  private Comparator<T> comparator; 
}

Chciałbym wymusić na typie T, że jego instancje są porównywalne.

Chcialbym też napisać bezparametrowy konstruktor MyClass, który ustawi zmienną prywatną na ten komparator.

Wiem, że od Javy 8. można pisać:

Comparator<String> natural = Comparator.<String>naturalOrder();

Pytanie jak zdobyć referencję do takiego konstruktora? Z resztą przy moim skromnym doświadczeniu sobie poradzę.
Z góry dzięki.

1
public class MyClass<T extends Comparable<T>> {
    private Comparator<T> comparator = Comparator.naturalOrder();
}

Referencję do konstruktora? Pytanie jest niejednoznaczne. Co chcesz zrobić?

0

Dziękuję za odpowiedź.

Trenuję własną implementację kolejki priorytetowej w Javie.
Jej konstruktor można wywołać bezparametrowo (i o to mi chodzi).

public class PriorityQueue <T, K extends Comparable<T>> {

    private T[] array;
    private int index;
    private Comparator<? super T> comparator;

    public PriorityQueue (int size, Comparator<T> comparator) {
        array =  (T[]) new Object[size];
        this.comparator = comparator;
    }

    public PriorityQueue () {
        this(Comparator.naturalOrder());
    }

    public PriorityQueue (Comparator<T> comparator) {
        this(10, comparator);
    }
}

IntelliJ się pluje:
Error:(19, 37) java: incompatible types: inference variable T has incompatible bounds
equality constraints: T
upper bounds: java.lang.Comparable<? super T>

P

1

No bo chciałbys miec Comparator<T>. A nie możesz stworzyc go przez Comparator.naturalOrder() - bo T nie jest Comparable.
K jest Comparable po T (co za potwór ?). Nigdzie nie używasz tego parametru K - więc na grzyba Ci to ?

Jak chcesz tego używać?

Może chcesz coś takiego? : też potworek ale powinien działać

public class PriorityQueue <T> {

    private T[] array;
    private int index;
    private Comparator<T> comparator;

    public PriorityQueue (int size, Comparator<T> comparator) {
        array =  (T[]) new Object[size];
        this.comparator = comparator;
    }

    public PriorityQueue () {
        this((Comparator<T>) Comparator.naturalOrder());
    }

    public PriorityQueue (Comparator<T> comparator) {
        this(10, comparator);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1