No puedo inicializar una Lista como en el código siguiente:

List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));

Me hago la siguiente error:

No se puede crear una instancia del tipo de List<String>

¿Cómo puedo crear una instancia de List<String>?

InformationsquelleAutor ahmednabil88 | 2012-11-15

12 Comentarios

  1. 699

    Si marca la API para List te aviso que dice:

    Interface List<E>

    Ser un interface significa que no puede ser instanciado (no new List() es posible).

    Si usted llega en ese enlace, usted encontrará algunos de los classes que implementar List:

    Todos Conocida La Implementación De Las Clases:

    AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

    Aquellos que se pueden crear instancias. Utilizar sus enlaces para saber más sobre ellos, I. E: para saber cual se adapta mejor a tus necesidades.

    Los 3 más comúnmente usados probablemente son:

     List<String> supplierNames1 = new ArrayList<String>();
     List<String> supplierNames2 = new LinkedList<String>();
     List<String> supplierNames3 = new Vector<String>();

    Bono:

    También puede crear una instancia con valores, de una manera más fácil, usando el Arrays class, de la siguiente manera:

    List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
    System.out.println(supplierNames.get(1));

    Pero tenga en cuenta que no está permitido añadir más elementos a la lista, como es fixed-size.

    • Las matrices.asList es genial, pero como usted debe haber notado por ahora no hacer lo que uno espera en casos como el de int[] a = {1,2,3}; System.out.println(Arrays.asList(a)); // [[[email protected]]
    • Eso no es lo que está pasando. Eso es una lista de un solo elemento, donde el elemento es una matriz de enteros. El quería comportamiento fue probablemente una lista de tres elementos 1, 2, y 3.
    • Hammarström para imprimir una lista o una matriz, puede utilizar java.util.Las matrices.toString(matriz);, por lo que esta característica ya está dado..
    • No sé de qué estás hablando, quiero decir que [[email protected] es el .toString() de una matriz de enteros, no la dirección de memoria de un List como @J. A. I. L. dijo.
    • Hammarström toString imprime la dirección de memoria.
    • Mi método imprime el contenido.
    • Algunos discorage uso de Vectores como este y here. Debido a problemas de subprocesamiento
    • Si usted necesita la lista resultante a ser un ArrayList, uso new ArrayList<>(Arrays.asList("sup1", "sup2", "sup3"))
    • Tengo un método que devuelve List<String> a un List<String> funcionando correctamente. Alguien sabe cómo es esto posible? List<String> tableList = getTableNames(sqlString);

  2. 94

    No se puede crear una instancia de una interfaz, pero hay algunas implementaciones:

    JDK2

    List<String> list = Arrays.asList("one", "two", "three");

    JDK7

    //diamond operator
    List<String> list = new ArrayList<>();
    list.add("one");
    list.add("two");
    list.add("three");

    JDK8

    List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

    JDK9

    //creates immutable lists, so you can't modify such list 
    List<String> immutableList = List.of("one", "two", "three");
    
    //if we want mutable list we can copy content of immutable list 
    //to mutable one for instance via copy-constructor (which creates shallow copy)
    List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));

    Además de que hay un montón de otras maneras suministrados por otras bibliotecas como Guayaba.

    List<String> list = Lists.newArrayList("one", "two", "three");
  3. 36

    Lista es un Interfaz, no se puede crear una instancia de una Interfaz, debido a que la interfaz es una convención, qué métodos deben tener sus clases. Con el fin de crear una instancia, usted necesita algunas realizaciones(implementaciones) de la interfaz. Pruebe el código de abajo, con muy popular implementaciones de la interfaz de Lista:

    List<String> supplierNames = new ArrayList<String>(); 

    o

    List<String> supplierNames = new LinkedList<String>();
  4. 13

    Deberá utilizar ArrayList<String> o tal.

    List<String> es una interfaz.

    Usar este:

    import java.util.ArrayList;
    
    ...
    
    List<String> supplierNames = new ArrayList<String>();
  5. 12

    Lista es una interfaz, y no se puede inicializar una interfaz. Crear una instancia de una clase de implementación en su lugar.

    Como:

    List<String> abc = new ArrayList<String>();
    List<String> xyz = new LinkedList<String>();
  6. 9

    En la mayoría de los casos, usted desea simple ArrayList – una implementación de List

    Antes de JDK versión 7

    List<String> list = new ArrayList<String>();

    JDK 7 y versiones posteriores, puede utilizar el operador diamante

    List<String> list = new ArrayList<>();

    Más información está escrito aquí Documentación de Oracle – Colecciones

  7. 8

    Lista es sólo una interfaz, una definición de la lista genérica. Usted necesidad de proporcionar una implementación de esta interfaz de lista. Dos más comunes son:

    ArrayList – una lista implementado a través de una matriz

    List<String> supplierNames = new ArrayList<String>();

    LinkedList – una lista implementado como una interconexión de la cadena de elementos

    List<String> supplierNames = new LinkedList<String>();
  8. 6

    Dependiendo de qué tipo de Lista que desea utilizar, algo así como

    List<String> supplierNames = new ArrayList<String>();

    debe ponerse en marcha.

    Lista es la interfaz, ArrayList es una implementación de la interfaz de Lista. Más de implementaciones que se adapte mejor a sus necesidades puede ser encontrado mediante la lectura de la JavaDocs de la interfaz de Lista.

  9. 6

    Si lo que desea es crear un inmutable List<T> con sólo uno objeto en ella, se puede utilizar esta API:

    List<String> oneObjectList = Collections.singletonList("theOnlyObject”);

    Más info: docs

  10. 5

    Lista es una Interfaz . Usted no puede utilizar la Lista para inicializarlo.

      List<String> supplierNames = new ArrayList<String>();

    Estos son los algunos de la Lista impelemented clases,

    ArrayList, LinkedList, Vector

    Usted puede usar cualquiera de estos como por su exigencia. Estos cada una de las clases tiene sus propias características.

    • Algunos discorage uso de Vectores como este y here. Debido a problemas de subprocesamiento
  11. 3

    Sólo en el caso de que alguno aún persiste en torno a esta cuestión. Porque, veo uno o dos nuevos usuarios de nuevo preguntando la misma pregunta y todo el mundo diciendo entonces , No, No puedes hacer eso, Queridos Prudencia, Aparte de todas las respuestas que se dan aquí, me gustaría proporcionar Información adicional –
    Sí, usted puede hacer realmente, Lista = new List();
    Pero en el costo de la escritura de implementaciones de todos los métodos de las Interfaces.
    La idea no es simplemente una Lista de lista = new List(); pero

    List<Integer> list = new List<Integer>(){
    
            @Override
            public int size() {
                //TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public boolean isEmpty() {
                //TODO Auto-generated method stub
                return false;
            }
    
            @Override
            public boolean contains(Object o) {
                //TODO Auto-generated method stub
                return false;
            }

    ….. y Así sucesivamente (No escribir todos los métodos).

    Este es un ejemplo de clase Anónima. Su correcta cuando alguien afirma , No, no se puede crear una instancia de una interfaz,, y que es justo. Pero nunca se puede decir , Usted no puede escribir la Lista de la lista = new List(); pero, evidentemente, usted puede hacer eso y eso es algo difícil de instrucción para que que Usted no puede hacer.

    • Aunque para ser claros, esto no crea un objeto cuyo tipo es List. Más bien, se declara una nueva clase que no tiene nombre y se implementa List, y en tiempo de ejecución crea un nuevo objeto de la recién declarada la clase.
  12. 0

    Hemos creado soyuz-a para simplificar 1 problema: ¿cómo convertir X a Y (por ejemplo, String a Integer). La construcción de un objeto es también el tipo de conversión, por lo que tiene una función simple para construir Map, List, Set:

    import io.thedocs.soyuz.to;
    
    List<String> names = to.list("John", "Fedor");

    Por favor, compruebe – que tiene un montón de otras características útiles

Dejar respuesta

Please enter your comment!
Please enter your name here