2017-05-03 27 views
-4

我无法理解为什么s.pop()不适用于我的代码。该数值显示的错误是:不兼容的类型,书(对象)与对象

的java:不兼容的类型
要求:bookShelf.Book
发现:java.lang.Object继承

这混淆了我,因为我只是把B1到堆栈,这是一个Book类型,所以不是我弹出一个Book关闭?

public class bookShelf{ 
    public static void main(String[] args){ 
     Book b1 = new Book(); 
     Stack s = new Stack(); 
     Book b2 = new Book(); 

     s.push(b1); 
     b2.b = s.pop(); //error is here 
    } 
} 

class Book{ 
    Book b; 
} 
+4

可能重复[什么是原始类型,为什么我们不应该使用它?](http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt - 我们使用-IT) – Tom

回答

1

应该在堆栈初始化期间配置原始类型。

例如Stack<Book> s = new Stack<>();

如果您未定义存储在堆栈中的类型,那么堆栈不会知道您以“书本”类型推送的项目。你也可以投出弹出的项目。

例如b2.b=(Book)s.pop();

0

Stack类是泛型类型,因此,你应该指定什么样的对象其持有:

Stack<Book> s = Stack<>(); 

和你的代码的其余部分应编译罚款:)

有关纯粹的Stack意味着什么(扰流板,它是原始类型!)的详尽解释,我建议您浏览汤姆指出的the (very!) nice question

相关问题