3 votes

Impression d'une liste en utilisant la réflexion

 public class Service{ 
       String serviceName;
      //setter and getter
  }

  public class Version{ 
       int VersionID;
      //setter and getter
  }

  public void test(Object list){

        //it shd print the obtained list

   }

List< Service> list1; //Service is a Bean
List< Version> list2; //Version is a Bean
test(list1);
test(list2);

Now the test method shd print the obtained list - (i.e) If the list is of type Service ,then serviceName should be printed using its getter. If the list type is Version versionID should be printed.
Is it possible to achieve this without using Interface or abstract class?

0voto

mtariq Points 1194
Si (Object instanceof List) {
     List liste = (List)Object ;

    pour(int index=0; index < liste.length();index++) {
        Object obj = liste.get(index);

        if(obj instanceof Service) {
            //cast pour service et imprimer la valeur ou utiliser la réflexion
            Service service = (Service)obj ;
            System.out.println(service.getServiceName());
        } else if(obj instanceof Version) {
            // cast pour Version et imprimer l'ID de version quelque chose
            Version version = (Version)obj ;
            System.out.println(version.getVersionId());
        }
    }
}

0voto

Daniel De León Points 2842
public void test(Object liste) {
    if(liste instanceof List)
        test((List)liste);
}

public void test(List liste) {
    if (!liste.isEmpty()) {
        Object o = liste.get(0);
        if (o instanceof Version) {
            @SuppressWarnings("unchecked")
            List lVersion = (List) liste;
            for (Version v : lVersion) {
                System.out.println(v.getVersionID());
            }
        } else if (o instanceof Service) {
            @SuppressWarnings("unchecked")
            List lService = (List) liste;
            for (Service s : lService) {
                System.out.println(s.getServiceName());
            }
        }
    }
}

0voto

Daniel De León Points 2842
public static class Service {

    String nomDuService;

    @Override
    public String toString() {
        return nomDuService;
    }
}

public static class Version {

    String IDVersion;

    @Override
    public String toString() {
       return IDVersion;
    }
}

public static void test(List list) {
    for (Object object : list) {
        System.out.println(object.toString());
    }
}

0voto

Kevin Welker Points 2990

@danLeon a jusqu'à présent l'idée la plus simple (ajout de toString aux classes), en supposant que vous avez accès à Service et Version.

Je ne sais pas pourquoi vous pensiez à la réflexion, mais la seule chose à laquelle je peux penser est que vous voulez quelque chose qui fonctionnera avec n'importe quel objet ayant un seul attribut String getter, et ensuite vous feriez quelque chose comme ceci (fou à mon avis, mais cela utilise la réflexion) :

Class clazz = list.get(0).getClass();
Method[] methods = clazz.getDeclaredMethods();
Method onlyStringGetter = null;
for (Method method: methods) {
    String mName = method.getName();
    if (mName.matches("get\w+") {
        if (method.getReturnType().equals(String.class) {
            if (onlyStringGetter != null) thrown new RuntimeException("Plus d'un getter String disponible");
            onlyStringGetter = method;
        }
    }
}
if (onlyStringGetter == null) throw new RuntimeException("Aucun getter String trouvé pour la classe : " + clazz.getName());
List strings = new ArrayList();
for (Object singleStringAttribObj: list) {
    // une certaine gestion d'exception est nécessaire pour ci-dessous
    String result = (String)onlyStringGetter.invoke(singleStringAttribObj);
    strings.add(result);
}
System.out.println(strings);

Je n'ai pas compilé ni essayé, mais c'est approximativement correct. Certainement une manipulation d'exception supplémentaire est requise

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X