Dubbio classe generica

di Anonimizzato16622 il
19 risposte

19 Risposte - Pagina 2

  • In ogni caso posso solo leggere dalla lista "numeri" non posso modificarla giusto?
  • Giovx24 ha scritto:


    In ogni caso posso solo leggere dalla lista "numeri" non posso modificarla giusto?
    Sì, puoi solo "estrarre" come Number (o al limite supertipo, es. Object). Ma non puoi inserire nulla, eccetto un null letterale che è lecito.

    Un List<? extends Number> NON vuol dire una lista che contiene qualunque cosa è-un Number (quello è List<Number>). Vuol dire una lista di cui NON sai quale è la parametrizzazione concreta, con l'unico indizio in più che si è certi che è sicuramente una parametrizzazione Number o più "sotto".

    Non puoi inserire es. un Float. E se la lista passata fosse un <Integer> ?
    Non puoi inserire es. un Long. E se la lista passata fosse un <Double>?

    E' questo il motivo. Ma infatti un <? extends Number> serve proprio solo quando devi "estrarre" e basta. E in un metodo come quel "somma" sarebbe assolutamente sufficiente.
  • Ok grazie
    quindi potrei anche ordinarla?
  • Giovx24 ha scritto:


    quindi potrei anche ordinarla?
    No, un List<? extends Number> non lo puoi ordinare. Tanto per esempio:
    List<Integer> interi = Arrays.asList(4, 2, 8, 5, 3, 10, 7);
    List<? extends Number> numeri = interi;
    Collections.sort(numeri);     // <-- Errore di compilazione !!
  • Grazie ancora
Devi accedere o registrarti per scrivere nel forum
19 risposte