2015-04-30 11 views
5

Questo danno un errore in IDE Eclipse. (Simbolo di errore che appare vicino al numero di riga)colata all'interno operatore condizionale in Java

String[] allText = null; 

Dopo questo ho fatto un po 'di roba come sigla l'array e così via. Ma secondo alcune condizioni. Quindi voglio usare un operatore condizionale come di seguito.

List<String> finalText = (allText != null) ? 
    Arrays.asList(allText) : (List<String>) Collections.emptyList(); 

Se ho messo la mia colata subito dopo il segno di uguale, funziona bene. (Avvolgendo il pieno funzionamento ternario) Qual è lo scopo di questo errore da venire in questo modo?

List<String> allHotels = (List<String>) ((allText != null) ? 
    Arrays.asList(allText) : Collections.emptyList()); 

risposta

1

E si lamenta perché il compilatore sta cercando di applicare il cast alla prima parte del operatore ternario e non l'intera espressione. Quindi questa parte del codice:

(List<String>) (allText != null) 

Questo è ciò che viene cast, ma (allText != null) restituisce un valore booleano. Per far funzionare il getto è necessario comprendere l'intera espressione, in questo modo:

List<String> allHotels = (List<String>) ((allText != null) ? 
Arrays.asList(allText) : Collections.emptyList()); 

Nota le parentesi intorno all'intera operatore ternario.

In realtà non è necessario eseguire il cast anche se il compilatore dedurrà il tipo corretto quando si esegue Collections.emptyList()

0

In seguito si valuta di essere un bool.

(allText != null) 

Non è chiaro come funzioni il cast. L'errore è corretto

(List<String>) (true or false) 

Seguire dovrebbe andare bene. (Non so se ho ricevuto la tua domanda giusta)

List<String> allHotels = (allText != null) ? 
       Arrays.asList(allText) : Collections.emptyList(); 
1

Guardando il codice java.util.Collections, il metodo emptyList() assomiglia:

public static <T> List<T> emptyList() { 
    return (List<T>) EMPTY_LIST; 
} 

Quando si cambierà la vostra emptyList() per EMPTY_LIST sarà ok senza casting, ma ovviamente con warning (EMPTY_LIST è un'istanza della classe EmptyList che è generica come tutte le classi della lista). Il problema riguarda il parametro generico, devi impostare il tipo. Si può fare in questo modo, se si desidera, anche con nessun avviso:

List<String> finalText = ((allText != null) ? Arrays.asList(allText) : Collections 
      .<String> emptyList());