2017-08-12 17 views
-4

Imのマーク属性を取得できません。理由を理解できません。javaクラス属性を取得しています。

public class StudentTest 
{ 
    public static int numberPassed(List students) 
    { 
     int count =0; 
     for(int i = 0; i < students.size();i++ ) 
     { 
     System.out.println(students.get(i).mark); 
     } 
     return count; 
} 
+1

'リストstudents'を - あなたはタイプを消去します。リストのすべての要素は 'Object'として扱われます。 – UnholySheep

+0

'(Student)students.get(i) ' –

+1

@cᴏʟᴅslikeのようなものは、なぜキャストのオーバーヘッドを導入しますか?最初はジェネリックを使用してください。 –

答えて

0

はJavaでは、すべてのリストは、オブジェクトを保持しているので、操作list.get(i)Objectを返します。 Studentクラスインスタンスで何らかのアクションを実行する場合は、このオブジェクトがStudentクラスインスタンスかどうかを確認してから、Studentクラスにキャストします。

あなたのリストには学生だけがいる場合は、のようにgeneric typeを追加できます。その後、list.get(i)オペレーションはStudentインスタンスを返します。しかしこれは両方向に進みます。Studentオブジェクトのみをこのリストに追加できます。要するに

、次の2つの選択肢があります。

使用ジェネリックリスト型:

public static int numberPassed(List<Student> students){ 
     ... 
} 

やキャスト:

Student student = (Student)students.get(i); 
System.out.println(student.mark); 
関連する問題