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

hgb9j2n6  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(345)

获取错误:不兼容的类型:int无法转换为t。我想使用链表构建一个队列,可以存储不同数据类型的项。请建议如何将属于不同数据类型的值传递到泛型函数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;
}
50pmv0ei

50pmv0ei1#

你应该换衣服 T 为了 Object . 这样,您可以放置所需的任何数据类型,然后可以使用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);
    }
}

泛型类提供了更大的解决方案。
还要考虑一下 int 是原始数据类型,而不是类。在这种情况下 Integer 是使用 int .

hfyxw5xn

hfyxw5xn2#

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(); 
    }
}

相关问题