2017-10-09 8 views
1

私は新しい生徒を作成し、それらが登録されている科目のリストを使ってそれらをインスタンス化したいと思いますが、可能かどうか、 ?コンストラクタで一連の列挙型を作成し、リストを作成する - Java

私は最初にコンストラクタにArrayListを配置しましたが、これが間違っていると確信しています。

最終的な結果は...私は名前、ID、およびそれらが追加され、などとコースから取り出すことができるように、彼らは勉強している科目の編集可能なリストを持つ学生を持っているということです

Student.java

private String name; 
private int id; 
private static int counter; 
private ArrayList<Subjects> subjects; 

public Student(String name, ArrayList<Subjects> subjects) { 
    this.name = name; 
    this.subjects = subjects; 
    counter++; 
    id=counter; 
} 

School.java

public class School { 

    List<Student> students = new ArrayList<>(); 

    public void addStudent(String name, ArrayList<Subjects> subjects) { 
     Student tempStudent = new Student(name,subjects); 
     students.add(tempStudent); 
    } 
} 

Run.java私の問題が来る...

public class Run { 

    public static void main(String[] args) { 
     School school = new School(); 

     school.addStudent("ABC", Subjects.English.toString()..........); 
    } 
} 

Subjects.java

public enum Subjects { 
    Maths, 
    English, 
    Science 
} 
+1

はこの 'school.addStudent( "ABC" を試します、Arrays.asList(Subjects.English)); ' – xxlali

+1

@xxlaliはい、しかし引数はshoですuldは 'ArrayList 'ではなく 'List 'と宣言されます。 –

+0

@MauricePerryはい、あなたは正しいです。 – xxlali

答えて

2

あなたはなしArrayを作成したりEnumを追加しています。 Studentクラスとそれに関連付けられたすべてのメソッドをListに変更し、ArrayListではなく変更します。

private List<Subjects> subjects; 

その後、あなたはここで私はどうなるのかだ

school.addStudent("ABC", Arrays.asList(Subjects.Maths, Subjects.English)); 
+1

「必要なのArrayList 互換性のないタイプが、 『asList』がを一覧表示することが推測された。 なしインスタンス(S)型変数(S)Tの存在ので、一覧をArrayListに準拠します」 'Arrays.asList(...) 'によって返された' List'は構造的に変更できないので、この答えは正しくありません。そのリストをコンストラクタ内にラップするか、引数を新しい 'ArrayList'(' new ArrayList <>(Arrays.asList(Subjects.English、Subjects.Maths)) 'に渡す必要があります。 –

1

を使用することができます。

private String name; 
private int id; 
private static int counter; 
private List<Subjects> subjects; 

public Student(String name, Collection<Subjects> subjects) { 
    this.name = name; 
    this.subjects = new ArrayList<>(subjects); 
    counter++; 
    id=counter; 
} 

// second constructor for convenience 
public Student(String name, Subjects... subjects) { 
    this(name, Arrays.asList(subjects)); 
} 

...

public class School { 
    List<Student> students = new ArrayList<>(); 

    public void addStudent(String name, List<Subjects> subjects) { 
     Student tempStudent = new Student(name,subjects); 
     students.add(tempStudent); 
    } 

    public void addStudent(String name, Subjects... subjects) { 
     Student tempStudent = new Student(name,subjects); 
     students.add(tempStudent); 
    } 
} 
関連する問題