2014-09-03 55 views
-1

嘿,夥計們我相對比較新的Java,並且我正在努力使用泛型。 基本上我想迭代存儲在Set-class中的一組轉換。如果我創建Set-Class的實例,我不會遇到任何問題,但是我想遍歷FA類中存儲的Transitions,這會導致一些麻煩(無法將Object轉換爲Transition)。必須有一些問題代碼,但我不能找到它:(Java對泛型的迭代

public static void main(String[] args) { 

    FA fa = new FA(new Set<String>("A", "B", "C"), 
        "A", 
        new Set<Transition>(new Transition("A", 1, "B"), 
             new Transition("B",2,"C")), 
             new Set<String>("C")); 

    Set<Transition> t=new Set(); 
    t.add(new Transition("A", 1, "B")); 

    for (Transition transition : t) { 
     //Works as intended 
    } 

    //error cannot convert Object to Transition 
    for (Transition transition : fa.Transitions) { 
     //not working 
    } 

發類:

public class FA<T> 
{ 
    public Set<T>   States; 
    public T   StartState; 
    public Set<Transition>   Transitions; 
    public Set<T>   FinalState; 

    public FA(){} 

    public FA(Set<T> states, T startstate, Set<Transition> transitions, Set<T> finalstate) { 

     States  = states; 
     StartState = startstate; 
     Transitions= transitions; 
     FinalState = finalstate ; 
    } 
} 

套裝類:

public class Set<T> implements Iterable<T> 
{ 

    private ArrayList<T> Menge=new ArrayList<T>(); 

    public Set(T ... menge) { 
    for(int i=0; i < menge.length; i++) {  
     Menge.add((T) menge[i]); 
    } 
    } 

public int count() { 
    return Menge.size(); 
} 

public T get(int i) { 
    return (T)Menge.get(i); 
} 

public void add(T i) { 
      Menge.add((T)i); 

} 

@Override 
public String toString() { 
    return Menge.toString(); 
} 

@Override 
public Iterator<T> iterator() { 
    // TODO Auto-generated method stub 
    return Menge.iterator(); 
} 
} 

過渡類:

public class Transition<T> 
{ 
    private T Source; 
    private T Label; 
    private T Target; 

public Transition(T source, T label, T target) { 
    Source = source; 
    Label = label ; 
    Target = target; 
} 

public T get(int i) 
{ 
    if(i==1)return Source; 
    if(i==2)return Label; 
    return Source; 
} 

@Override 
public String toString() { 
    return Source.toString() + " - " + Label.toString() + " -> " + Target.toString(); 
} 
} 
+1

fa.Transition or fa.TransitionS? – DmitryKanunnikoff 2014-09-03 17:36:29

+0

在您的第一個代碼塊中,您引用了不存在的fa.transition。 – ControlAltDel 2014-09-03 17:38:52

+0

轉換抱歉;)但沒有修復錯誤 – Brainless 2014-09-03 17:40:26

回答

1

發的聲明是錯誤的,它應該是:

FA<Transition> fa = new FA<>(new Set<String>("A", "B", "C"), 
        "A", 
        new Set<Transition>(new Transition("A", 1, "B"), 
             new Transition("B",2,"C")), 
             new Set<String>("C")); 

而且順便說一句有在泛型實例一些其他錯誤,我建議你閱讀http://docs.oracle.com/javase/tutorial/java/generics/

+0

嘿感謝您的快速響應,您的解決方案似乎工作。我想我必須閱讀更多關於泛型-.- – Brainless 2014-09-03 17:44:00

+0

我很高興它幫助!因此,您能否將回應標記爲已接受? – antoniob 2015-04-15 16:25:25