2017-06-07 6 views
2
class Student{ 
} 

class CollegeStudent extends Student{ 
} 

私はCollegeStudentのリストを持っている、と私は学生のリストに変換したい:このようにサブクラスを親クラスに変換することは意味がありますか?

List<CollegeStudent> collegeStudents = getStudents(); 
List<Student> students = new ArrayList<Student>(); 
for(CollegeStudent s : collegeStudents){ 
    students.add(s); 
} 

これは目的を達成するための適切な方法は何ですか?目的音ですか?これをやりたいのは、別のクラスを作成する必要があるからです。これは、CollegeStduentのリストではなく、Studentのリストをパラメータとして取ります。

+0

いいえ、あなたはすでに '、そうそして、それはあなたのニーズに合った場合は、変換 –

+1

を行う必要がcollegeStudents'ないで生徒のリストを持っていますあなたは大学生の同質のリストをおそらく異種の学生リストに入れることができます。 'new ArrayList(collegeStudents)'や 'students.addAll(collegeStudents)'を使って、より簡単に学生を追加することができます。自分でリストを繰り返し処理する必要はありません。 –

+0

私の追加情報をご覧ください。 – user697911

答えて

5

罰金だが、いくつか短いかの方法があります:

// Using the Collection<? extends E> constructor: 
List<Student> studentsA = new ArrayList<>(collegeStudents); 
// Using Collections.unmodifiableList which returns 
// an unmodifiable view of the List<CollegeStudent> 
// as a List<Student> without copying its elements: 
List<Student> studentsB = Collections.unmodifiableList(collegeStudents); 
// Older versions of Java might require a type 
// witness for Collections.unmodifiableList: 
List<Student> studentsC = Collections.<Student>unmodifiableList(collegeStudents); 
+0

私はBとCがコンパイルされるとは思わない。 – shmosel

+0

@shmoselそうです。たとえば、http://ideone.com/L6KA5Qを参照してください。 – Radiodef

+1

ああ、私は 'synchronizedList()'の署名を見ていました。いい答え。 – shmosel

関連する問題