2017-08-12 3 views
-4

Je n'arrive pas à obtenir l'attribut mark de Student et je ne comprends pas pourquoi.java Listes obtenant des attributs de classe

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

'Liste students' - vous avez effacé le type. Chaque élément de la liste est traité comme 'Object' – UnholySheep

+0

Quelque chose comme' (Student) students.get (i) ' –

+1

@ cᴏʟᴅsᴘᴇᴇᴅ pourquoi introduire les frais généraux de casting ?. il suffit d'utiliser des génériques en premier lieu. –

Répondre

0

En Java, chaque liste contient des objets, de sorte que l'opération list.get(i) retourne un Object. Si vous souhaitez effectuer une action sur l'instance de classe Student, vous devez vérifier si cet objet est une instance de classe Student., Puis la convertir en classe Student. Si vos listes ne contiennent que des étudiants, vous pouvez ajouter un generic type comme suit: List<Student> stidents. Ensuite, l'opération list.get(i) renverra une instance Student. Mais cela va dans les deux sens, vous pouvez seulement ajouter Student objets à cette liste.

En bref, vous avez deux choix:

utilisation type liste générique:

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

ou acteurs:

Student student = (Student)students.get(i); 
System.out.println(student.mark);