dziwna sytuacja - poniżej kod:„Ostrzeżenie: [zaznaczone] niezaznaczone cast” podczas rzucania obiektu do ArrayList <String[]>
ArrayList<String[]> listArr = new ArrayList<>();
Object[] obj = new Object[]{"str", listArr};
String str = (String) obj[0];//OK
ArrayList<String[]> list = (ArrayList<String[]>) obj[1];//warning: [unchecked] unchecked cast
Kiedy projekt jest zbudowany (z opcją kompilatora -Xlint:unchecked
we właściwościach projektu), mam jednego Uwaga:
uwaga: [zaznaczone] zaznaczone obsada
ArrayList lista = (ArrayList) należy oBJ [1];
wymagane: ArrayList
znaleziono: Object
Ale odlewania ciąg w taki sam sposób, jest OK. Jaki jest tutaj problem?
OK, ale jak później zmienić go na 'ArrayList' typ, więc mógłbym przekazać go metodom, które wymagają 'ArrayList ' (w przeciwnym razie kod się nie skompiluje) ? Czy powinienem po prostu zignorować to ostrzeżenie? –
@Ernestas Gruodis: Jest to ograniczenie, którego nie można rozwiązać bez głębokich, niekompatybilnych zmian w języku Java * i * JVM. Ale pytanie brzmi: dlaczego w ogóle używasz 'Object []'. System typu Java pozwala śledzić typy obiektów i jeśli celowo zdecydujesz się usunąć informacje o typie, nie powinieneś narzekać na utratę informacji o typie ... – Holger
'Object []' ponieważ metoda zwraca różne typy danych. Oznacza to, że odpowiedź na to pytanie. –