utilizzo dell'operatore ternario entro parentesi IF

0

potresti per favore aiutarmi a capire questo operatore ternario

public static <E> void replace(List<E> list, E val, E newVal) {
    for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
        if (val == null ? it.next() == null : val.equals(it.next()))
            it.set(newVal);
}

ho pensato alla parte successiva? è solo una dichiarazione regolare, quindi come si usa == qui?

    
posta user96454 24.07.2013 - 06:44
fonte

2 risposte

3

È molto semplice da vedere, una volta che inizi a estrarre l'espressione in una variabile separata:

public static <E> void replace(List<E> list, E val, E newVal) {
for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
    T theVariable = val == null ? it.next() == null : val.equals(it.next());
    if (theVariable)
        it.set(newVal);
}

Ho intenzionalmente lasciato il tipo come T . Quando pensi a quale tipo deve essere, viene visualizzata la risposta alla tua domanda: poiché la variabile viene usata come condizione di un'espressione if, deve essere un tipo boolean , e quindi, è chiaro, quale percentualeit.next() == null sta facendo qui.

Ti sei appena imbattuto nel caso in cui a ? b : c ha tre elementi a,b,c che sono tutti di tipo boolean .

    
risposta data 24.07.2013 - 07:13
fonte
1

È una normale ESPRESSIONE, che in questo caso restituisce un valore booleano. È l'equivalente di:

public static <E> void replace(List<E> list, E val, E newVal) {
    for (ListIterator<E> it = list.listIterator(); it.hasNext(); ) {
        bool cond = val == null ? it.next() == null : val.equals(it.next());
        if (cond) {
            it.set(newVal);
        }
     }
}

Un'espressione ternaria restituisce un valore.

    
risposta data 24.07.2013 - 07:13
fonte

Leggi altre domande sui tag