2014-09-03 5 views
-1

Привет, ребята Я отношусь к Java с релятивизмом, и я немного борюсь с использованием дженериков. В принципе, я хочу перебрать коллекцию переходов, которые хранятся в Set-class. Если я создаю экземпляр класса Set, у меня нет никаких проблем, но я хочу перебирать переходы, хранящиеся в FA-классе, что вызывает некоторые проблемы (невозможно преобразовать Object to 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 
    } 

Fa-класс:

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 ; 
    } 
} 

Set-класс:

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(); 
} 
} 

Transition-класс:

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 или fa.TransitionS? – DmitryKanunnikoff

+0

В вашем первом блоке кода вы ссылаетесь на fa.transition, которого не существует. – ControlAltDel

+0

Переходы извиняются;) но не исправляет ошибку – Brainless

ответ

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

+0

Я рад, что это помогло! Таким образом, вы могли бы пометить ответ как принятый? – antoniob

Смежные вопросы