2015-04-30 15 views
5

To daje błąd w Eclipse IDE. (Symbol Błąd pojawiający się w pobliżu linii numer)odlewania wewnątrz operatora warunkowego w Javie

String[] allText = null; 

po tym mam zrobić pewne rzeczy jak initialing tablicę i tak dalej. Ale według niektórych warunków. Więc chcę użyć operatora warunkowego, jak poniżej.

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

Jeśli kładę odlewanie tuż po znaku równości, to działa dobrze. (Owijanie pełny potrójny operację) Jaki jest cel tego błędu należy przyjść w ten sposób?

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

Odpowiedz

1

Jest skarży ponieważ kompilator stara się stosować do obsady do pierwszej części operatora potrójnego, a nie całego wyrażenia. Tak więc ta część kodu:

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

To co jest obsada, ale (allText != null) ma wartość logiczną. Aby uczynić pracę odlewu trzeba objąć całą ekspresję, tak:

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

Uwaga nawiasie wokół całego operatora potrójnego.

W rzeczywistości nie należy wykonywać rzutowania, ponieważ kompilator wywnioskuje prawidłowy typ podczas wykonywania Collections.emptyList()

0

Obserwuje ocenia się bool.

(allText != null) 

Nie jest jasne, jak może działać Twoja obsada. Błąd jest poprawny.

(List<String>) (true or false) 

Po powinno być dobrze. (Nie wiem, czy mam pytanie prawy)

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

Patrząc na kod java.util.Collections metoda emptyList() wygląda następująco:

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

Kiedy zmienisz emptyList(), aby EMPTY_LIST będzie ok bez rzutowania, ale oczywiście z ostrzeżeniem (EMPTY_LIST jest instancją klasy EmptyList, która jest generyczna jak wszystkie klasy list). Problem dotyczy parametru ogólnego, musisz ustawić typ. Można zrobić to w ten sposób, jeśli chcesz, a nawet bez ostrzeżeń:

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