Obteniendo error: tipos incompatibles: int no se puede convertir a T. Quiero crear una cola usando una lista vinculada que pueda almacenar elementos de diferentes tipos de datos. Sugiera formas de cómo puedo pasar valores que pertenecen a diferentes tipos de datos a la función genérica add().
public void main(String args[]) { MyQueue<T> q=new MyQueue<T>(); q.add(10); q.add("Hello"); } public void add(T item) { QueueNode<T> t=new QueueNode<T>(item); if(last!=null) { last.next=t; } last=t; }
T
es un marcador de posición para un Tipo, pero no puede declarar T
de esta manera ya que T
debe ser un tipo conocido. Quieres algo como esto. Aquí T
es un tipo conocido que se pasa a QueueNode
y MyQueue
.
package com.company; import java.util.ArrayList; import java.util.List; class QueueNode<T> { private T nodeVal; T getNodeVal() { return nodeVal; } void setNodeVal(T nodeVal) { this.nodeVal = nodeVal; } QueueNode(T nodeVal) { this.nodeVal = nodeVal; } } class MyQueue<T> { private List<QueueNode<T>> actualQueue = new ArrayList<QueueNode<T>>(); public List<QueueNode<T>> getActualQueue() { return actualQueue; } public void enqueue(T t) { actualQueue.add(new QueueNode<>(t)); } public QueueNode<T> dequeue() { return actualQueue.remove(0); } } class Main { public static void main(String[] args) { MyQueue<Integer> integerQueue = new MyQueue<Integer>(); integerQueue.enqueue(1); integerQueue.enqueue(2); integerQueue.enqueue(3); integerQueue.getActualQueue().forEach(e -> System.out.print(e.getNodeVal() + " ")); //prints 1 2 3 System.out.println(); integerQueue.dequeue(); integerQueue.getActualQueue().forEach(e -> System.out.print(e.getNodeVal() + " ")); //prints 2 3 System.out.println(); integerQueue.dequeue(); integerQueue.getActualQueue().forEach(e -> System.out.print(e.getNodeVal() + " ")); //prints 3 System.out.println(); } }
Deberías cambiar de T
por Object
. De esta manera, puede colocar cualquier tipo de datos que desee y luego puede usar un foreach, por ejemplo:
public static void main(String args[]) { Queue<Object> queues=new LinkedList<>(); queues.add(10); queues.add("Hello"); for(Object queue:queues){ System.out.println(queue); } }
La clase Genérica da una solución más grande.
También considere que int
es un tipo de datos primitivo y no es una clase. En este caso, Integer
es la clase que usa int
.