在java中如何在泛型函数中使用值?
获取错误:不兼容的类型:int无法转换为T。 我想使用链表构建一个队列,它可以存储不同数据类型的项。请建议如何将属于不同数据类型的值传递到通用函数add()中在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
public void main(字符串参数[])
{
MyQueue q=新的MyQueue();
q、 增加(10);
q、 加上(“你好”);
}
公共作废新增(T项)
{
QueueNode t=新的QueueNode(项);
if(last!=null)
{
last.next=t;
}
last=t;
}
您应该更改对象的deT
。通过这种方式,您可以放置所需的任何数据类型,然后可以使用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();
}
}