2012-08-16 42 views
0

我該如何解決這個錯誤?我只嘗試this,(Article) thissuper.iterable(),但似乎沒有任何工作。只有Article類型纔會被添加到此隊列中。 Java 1.7.0_03。擴展集合時,如何在'this'上使用Iterable?

[javac] C:\cygwin\home\Chloe\Queue.java:26: error: incompatible types 
[javac]    for (Article a: (Iterable) this) { 
[javac]       ^
[javac] required: Article 
[javac] found: Object 

這裏是源代碼。

public class Queue<T> extends ArrayDeque { 

public int words() { 
    int words; 
    for (Article a: (Iterable) this) { 
    } 
} 
} 

回答

4

您的隊列的迭代器將返回 T Object情況下,不Article。你的循環應該是這樣的:

public int words() { 
    int words; 
    for (Object a: this) { 
     // do something 
    } 
} 

或者,如果你需要的文章隊列,聲明類是這樣的:

public class Queue extends ArrayDeque<Article> { 

    // this queue will store Article instances 

} 
+0

打我給它;) – MadProgrammer 2012-08-16 04:34:08

+1

實際上,'ArrayDeque'包含'Objects',它不是一個泛型類型聲明的,因此,從技術上講,你的第一個例子是錯誤的,但第二個是正確的;) – MadProgrammer 2012-08-16 05:07:12

+0

@MadProgrammer - 絕對正確!感謝您的提醒! – 2012-08-16 05:36:39

2

隊列包含的對象,它沒有辦法知道,如果任何項目是一種Article ...

試試這個

for (Object a: this) 

或本

public class Test<T> extends ArrayDeque<T> { 

    public int words() { 
     int words; 
     for (T a : this) { 
     } 
    } 
} 
+0

謝謝我做到了:'擴展ArrayDeque

{'。有效。我也嘗試過'for(Object')並且投它,但是我更喜歡我的第一種方式(你的第二種方式),沒有使用Eclipse,Eclipse會大聲抱怨。 – Chloe 2012-08-17 01:41:30

相關問題