comparar parámetros utilizados en una clase estática

Hay un código que realmente no entiendo del libro de Algoritmos de Sedgewick, específicamente la parte de Comparadores. Entiendo muy bien cómo funciona todo lo demás, p. Ej., El algoritmo proporcionado, la intención de usar Comparadores vs Comparable, etc. Sin embargo, lo único que parece no obtener son los parámetros de la comparación (Transacción v, Transacción w ) en la clase estática. Por ejemplo, la matriz de objetos se pasa y se mantiene por otra referencia de objeto en orden. Cuando se invoca el método auxiliar, less (), los dos elementos de la matriz Object se mantienen en otras referencias Object. Pero esto es lo que no entiendo: en

    public static class WhoOrder implements Comparator<Transaction> {
    public int compare(Transaction v, Transaction w) {
        return v.who.compareTo(w.who);
    }
}

Las referencias de objeto parecen haber sido reemplazadas por referencias de transacción. ¿Cómo es esto así? Con el polimorfismo, tendrías que usar un downcast explícito, pero esto parece evitarlo. Supongo que se debe al tipo parametrizado, pero no sé por qué.

La clase que contiene una clase estática que implementa Comparator

public class Transaction {
private final String  who;      // customer
private final Date    when;     // date
private final double  amount;   // amount

...


// ascending order of account number
public static class WhoOrder implements Comparator<Transaction> {
    public int compare(Transaction v, Transaction w) {
        return v.who.compareTo(w.who);
    }
}

public static void main(String[] args) {
    ...
    Arrays.sort(a, new Transaction.WhoOrder());
}

La clase de clasificación:

// use a custom order and Comparator interface - see Section 3.5
public static void sort(Object[] a, Comparator c) {
    int N = a.length;
    for (int i = 0; i < N; i++) {
        for (int j = i; j > 0 && less(c, a[j], a[j-1]); j--) {
            exch(a, j, j-1);
        }
    }
}

// is v < w ?
private static boolean less(Comparator c, Object v, Object w) {
    return (c.compare(v, w) < 0);
}

// exchange a[i] and a[j]
private static void exch(Object[] a, int i, int j) {
    Object swap = a[i];
    a[i] = a[j];
    a[j] = swap;
}
Respuesta 1

Problema: debería analizar una cadena de fecha RFC3339. Funciona bien con ISO_ZONED_DATE_TIME: ZonedDateTime.parse ("1985-04-12T23: 20: 50.52Z", ISO_ZONED_DATE_TIME); ZonedDateTime.parse ("1996-12-19T16: 39: 57 -...

Mi objetivo es conectarme a mi servidor Linux usando una aplicación Java y ejecutar un comando Linux. Ya he logrado esto usando la API JSch pero parece que no puedo entender cómo ejecutar más de ...

Tengo un problema de diseño realmente difícil en mi aplicación de swing. En términos generales, tengo una JTable y una JLabel para mostrar. La etiqueta está justo debajo de la mesa. Cuando la altura de estos dos componentes ...

He subido mi aplicación en la tienda de juegos, pero cuando descargo mi aplicación, el ícono se establece en el ícono predeterminado de Android. Intenté solucionar el problema muchas veces, pero no puedo. Todo parece estar bien en mi ...