Simple LinkedList no me deja agregar .add(int);

Estoy practicando con unos tutoriales y me surgió un problema. No puedo agregar a la lista un objeto int?

package paquete;
import java.util.*;
import java.util.LinkedList;

class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub

LinkedList list = new LinkedList();

list.add(“Perro”);
list.add(0, “Gato”);
list.add(5);

El problema está en list.add(5); que cuando lo ejecuto me tira este error:

Exception in thread “main” java.lang.Error: Unresolved compilation
problem: The method add(int, Object) in the type LinkedList is not
applicable for the arguments (int)

at paquete.Main.main(Main.java:14)

Ojalá me puedan ayudar!

=================

  

 

No pude reproducir tu error, vea el código en Ideone. ¿Estás seguro que no hay nada más en tu código?
– Math
el 14 ene. a las 16:35

  

 

El comentario que le hice a Omar, si cambias la libreria a jre1.8.0_65 sucede el error.
– Popplar
el 14 ene. a las 16:39

=================

1 respuesta
1

=================

La cuestión con Java es que las Listas son colecciones; y las colecciones usan algo que se llama type erasure, o generics. En pocas palabras, puedes inicializar una lista solo con tipos de una clase. En tu caso quieres agregar un int que es un valor primitivo, no un objeto. Lo que puedes hacer para agregar ese valor sería lo siguiente:

LinkedList list = new LinkedList<>();
Integer intToAdd = new Integer(5);
list.add(intToAdd);

La clase Integer funciona cómo un envoltorio para valores primitivos de tipo int. De esa manera pasas cómo parámetro que la lista acepta valores de tipo Object (es la clase “origen”, en pocas palabras).

  

 

Gracias por la información, ahora sí funciona. Al código que me daba problemas ya me anda bien tambien, cambiando la libreria a “JavaSE-1.7” antes lo tenía en “jre1.8.0_65”. Me gustaría saber por qué se pudo arreglar cambiando la librería; muchas gracias por la solución!
– Popplar
el 14 ene. a las 16:23

  

 

+1, Se puede cambiar LinkedList list = new LinkedList<>(); por LinkedList list = new LinkedList(); ya que esa sintaxis no es valida en java 6
– jasilva
el 14 ene. a las 16:52

  

 

Para las clases envoltorio de los tipos primitivos es mejor utilizar .valueOf en general, para permitir que la implementación se encargue, si quiere, de “cachear” objetos. En este caso usaríamos Integer.valueOf(5)
– Darkhogg
el 14 ene. a las 17:31

  

 

O puedes usar el auto boxing y poner : Integer intToAdd = 5;
– Jose Antonio Dura Olmos
el 14 ene. a las 17:59

  

 

@jasilva eso es completamente válido si estás usando Java 6, pero en Java 7 y delante te marca una warning… las warnings son mis enemigas.
– Omar
el 14 ene. a las 20:13