Penso che mi manchi qualcosa di base qui. Qualsiasi spiegazione o suggerimento alle domande precedenti sarà molto utile.È una sottoclasse dell'array String di un array Object?
import java.util.Arrays;
import java.util.List;
public class St {
public static void bla(Object[] gaga) {
gaga[0] = new Date(); // throws ArrayStoreException
System.out.println(gaga[0]);
}
public static void bla(List<Object> gaga) {
System.out.println(gaga.get(0));
}
public static void main(String[] args) {
String[] nana = { "bla" };
bla(nana); // Works fine
List<String> bla1 = Arrays.asList(args);
bla(bla1); // Wont compile
System.out.println(new String[0] instanceof Object[]); // prints true
System.out.println(nana.getClass().getSuperclass().getSimpleName()); // prints Object
}
}
Così, sembra come un List<String>
non è una sottoclasse di un List<Object>
ma un String[]
è una sottoclasse di Object[]
.
È un'ipotesi valida? Se è così, perché? Se no, perché?
Grazie
Dal commento @maerics qui sotto - il 'new String [0] instanceof Object []' restituisce true. Quindi, String [] è un tipo di oggetto e un tipo di oggetto [] e un tipo di CharSequence [] ecc. Corretto? – Kal
@Kal che sembra essere un caso speciale per coprire la covarianza. Vedi il mio aggiornamento – Bozho
Grazie .. Ho appena visto la tua modifica. – Kal