有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java循环遍历泛型

嘿,伙计们,我对Java比较陌生,我在使用泛型方面有点困难。 基本上,我想迭代存储在集合类中的一组转换。如果我创建Set类的一个实例,我不会遇到任何问题,但我希望迭代FA类中存储的转换,这会导致一些问题(无法将对象转换为转换)。代码一定有问题,但我找不到:(

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

设置类:

 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) 个答案

  1. # 1 楼答案

    fa的声明是错误的,应该是:

    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/