在java中如何在泛型函数中使用值?

在java中如何在泛型函数中使用值?,java,generics,queue,Java,Generics,Queue,获取错误:不兼容的类型:int无法转换为T。 我想使用链表构建一个队列,它可以存储不同数据类型的项。请建议如何将属于不同数据类型的值传递到通用函数add()中 public void main(字符串参数[]) { MyQueue q=新的MyQueue(); q、 增加(10); q、 加上(“你好”); } 公共作废新增(T项) { QueueNode t=新的QueueNode(项); if(last!=null) { last.next=t; } last=t; } 您应该更改对象的de

获取错误:不兼容的类型:int无法转换为T。 我想使用链表构建一个队列,它可以存储不同数据类型的项。请建议如何将属于不同数据类型的值传递到通用函数add()中

public void main(字符串参数[])
{
MyQueue q=新的MyQueue();
q、 增加(10);
q、 加上(“你好”);
}
公共作废新增(T项)
{
QueueNode t=新的QueueNode(项);
if(last!=null)
{
last.next=t;
}
last=t;
}

您应该更改
对象的de
T
。通过这种方式,您可以放置所需的任何数据类型,然后可以使用foreach,例如:

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);
    }
}
publicstaticvoidmain(字符串参数[])
{
Queue queues=new LinkedList();
增加(10);
添加(“你好”);
用于(对象队列:队列){
System.out.println(队列);
}
}
泛型类提供了更大的解决方案


也认为int >代码>是一个原始数据类型,而不是一个类。在本例中,

Integer
是使用
int

T
作为类型占位符的类,但不能这样声明
T
,因为
T
必须是已知类型。你想要这样的东西。这里,
T
是一种已知类型,它被传递给
QueueNode
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(); 
    }
}


package.com公司;
导入java.util.ArrayList;
导入java.util.List;
类队列节点{
私人T-nodeVal;
T getNodeVal(){
返回nodeVal;
}
void setNodeVal(T nodeVal){
this.nodeVal=nodeVal;
}
QueueNode(T nodeVal){
this.nodeVal=nodeVal;
}
}
类MyQueue{
private List actualQueue=new ArrayList();
公共列表getActualQueue(){
返回实际队列;
}
公共无效排队(T){
添加(新的队列节点(t));
}
公共队列节点出列(){
返回实际队列。删除(0);
}
}
班长{
公共静态void main(字符串[]args){
MyQueue integerQueue=新建MyQueue();
integerQueue.enqueue(1);
integerQueue.enqueue(2);
integerQueue.enqueue(3);
integerQueue.getActualQueue().forEach(e->System.out.print(e.getNodeVal()+);//打印1 2 3
System.out.println();
integerQueue.dequeue();
integerQueue.getActualQueue().forEach(e->System.out.print(e.getNodeVal()+);//打印2 3
System.out.println();
integerQueue.dequeue();
integerQueue.getActualQueue().forEach(e->System.out.print(e.getNodeVal()+);//打印3
System.out.println();
}
}

这里有两个问题:首先,在q-maybe-Object的声明中需要一个实际的类型,因此
MyQueue
。其次,对象需要具有类类型,而不是基元类型。您可能需要编写
q.add(新整数(10))
——我不记得一旦声明正确,是否会自动发生异常。将
MyQueue
设置为泛型并不意味着它的单个实例中可以包含多个类别<代码>q
只能包含一种类型的对象。在这种情况下,
T
。正如用户在我上面所说的,您可以将其设置为
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(); 
    }
}