2017-05-03 31 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

相關問題