2013-11-26 74 views
0

所以,這是我之前提出的後續問題。我寫了下面的代碼:擴展內聯通用抽象模板類

import java.util.List; 
import java.util.Iterator; 

public abstract class IterableList<T> { 
    public void perfrom(List<T> ls) { 
    Iterator<T> l = ls.iterator(); 
     while (l.hasNext()) 
      action(l.next()); 
    } 
    protected abstract void action(T obj); 
} 

這是創建一個模板(像八九不離十在C宏)這樣我就可以實現的操作方法,並通過許多事情列表中的迭代。我在執行內聯代碼時遇到問題(我認爲是這個詞?),但我無法弄清楚如何使用泛型編寫代碼。爲了給你什麼,我試圖做一個例子,我基本上要做到以下幾點:

new IterableList<String>{ 
    void action(String s) { 
     // do something 
    } 
}.perform(myListOfStrings); 

但我沒有真正得到任何運氣,我不會給出任何有用的錯誤。我有點不熟悉Java中的熟悉區域,我還沒有在該語言中編寫過相當長的一段時間。

到目前爲止,我得到的錯誤(在eclipse中)是「令牌的語法錯誤,錯位的構造(s)」和「void是變量操作的無效類型」。就我所能理解的而言,這些方法並沒有真正的幫助。

+0

出了什麼問題,你試過嗎? –

+0

你需要提供更多的信息,特別是什麼不工作,以及你認爲它沒有做你想做的具體原因。否則沒有人能夠幫助你。基於你提供的小代碼,它看起來確實如此,所以問題在於你沒有共享的代碼。 –

+0

我得到「令牌的語法錯誤,錯位的結構」和「無效的變量行爲是無效的類型」我不太確定。我正在使用eclipse。這是我得到的唯一的錯誤信息。我不知道什麼是錯的。 – user2827678

回答

2

你的語法有點不對。

List<String> myListOfStrings = ...// some List 

new IterableList<String>() { // missing() 
    public void action(String s) { 
     // do something 
    } 
}.perfrom(myListOfStrings); 

請注意,您不能減少方法的可見性。 action在父類中聲明爲public,所以子類中的action()需要至少爲public。另外,perform拼寫錯誤。

以上將相當於

public class AnonymousClass extends IterableList<String> { 
    public void action(String s) { 
     // do something 
    } 
} 

... 
new AnonymousClass().perfrom(myListOfStrings); 
+0

你可以用通用的方式定義一個抽象方法,然後在沒有泛型的情況下實現它? –

+0

@SteveP檢查最後一次編輯。希望解釋它。 –

+0

完美,謝謝! – user2827678