编译java程序时出错

时间:2014-06-25 08:41:29

标签: java

我有以下两个班级

import java.util.*;
public interface Stack<Item> extends Iterable<Item>{
    void push(Item item);
    Item pop();
    boolean isEmpty();
    int size();
    Iterator<Item> iterator();
}

第二课是:

import java.util.*;
public class LinkedStack<Item> implements Stack<Item>{

private Node head;
private int size;


private class Node{
    Item item;
    Node next;

    public Node(Item item){
        this.item = item;

    }

    public Node(Item item, Node next){
        this.item = item;
        this.next = next;

    }
}


public boolean isEmpty(){
    return(head == null);
}

public int size(){
    return size;
}

public void push(Item item){
    head = new Node(item,head);
    size++;
}   

public Item pop(){
    Item item = head.item;
    head = head.next;
    size--;
    return item;
}

public Iterator<Item> iterator(){
    return new LinkedStackIterator<Item>();
}

class LinkedStackIterator<Item> implements Iterator<Item>{
    private Node current = head;

    public boolean hasNext(){
        return current != null;
    }

    public Item next(){
        Item return_item = current.item;
        current = current.next;
        return return_item;
    }

    public void remove(){};
}
}

我在方法public Item next()中遇到了类型错误:

Item return_item = current.item;

如果我将上面的行写为

Item return_item = (Item) current.item;

工作正常。任何人都可以提出原因吗?

我遇到编译错误:

  

LinkedStack.java:57:错误:不兼容的类型    项目return_item = current.item;                              ^    要求:项目#2    发现:项目#1    其中Item#1,Item#2是类型变量:      Item#1扩展了在LinkedStack类中声明的Object      Item#2扩展了在LinkedStack.LinkedStackIterator类中声明的Object   1错误

1 个答案:

答案 0 :(得分:1)

由于您的LinkedStackIterator类是通用的,因此当它引用Item时,它表示与您的外部类中使用的Item不同的类型。一种解决方案是更改LinkedStackIterator,因此它不是通用的,即更改:

class LinkedStackIterator<Item> implements Iterator<Item>{

class LinkedStackIterator implements Iterator<Item>{

旁注:Java程序员看到泛型类型变量(如Item这样有意义的名称可能会让人感到困惑。您可能希望考虑将其重命名为更期望的内容,例如T