TP7q3

Programmation Avancée

Modérateur : Douin

TSwank
Messages : 15
Inscription : 05 juin 2014 11:03

Re: TP7q3

Message par TSwank » 20 déc. 2016 18:29

gautierd a écrit :Merci TSwank, que faut-il vérifier pour la covalence ? Que le type de retour de la classe fille est un sous type du retour des méthodes dans les classes supérieures ?
Bonjour,

Oui, c'est bien ça.
La méthode isAssignableFrom le permet par exemple

gautierd
Messages : 49
Inscription : 12 oct. 2016 14:55

Re: TP7q3

Message par gautierd » 20 déc. 2016 20:02

J'avais bien rajouté la condition assignableFrom comme ceci

public static Set<Method> getHeritees(String nomDeLaClasse) throws ClassNotFoundException {
Set<Method> resultat = new HashSet<Method>();
Class<?> classDescriptor = Class.forName(nomDeLaClasse);
List<Method> declaredMThis = new ArrayList<Method>(Arrays.asList(classDescriptor.getDeclaredMethods()));
List<Method> methodesSuperClass = null;
boolean found = false;
while (classDescriptor != null)
{
methodesSuperClass = new ArrayList<Method>(Arrays.asList(classDescriptor.getDeclaredMethods()));
for (Method m : methodesSuperClass)
{
found = false;
if ( ( (Modifier.isProtected(m.getModifiers())) || (Modifier.isPublic(m.getModifiers())) ) && (!Modifier.isAbstract(m.getModifiers())) )
{
for (Method eachMethod : declaredMThis)
{
if ( (eachMethod.getName()==m.getName()) && (eachMethod.getParameterCount()==m.getParameterCount()) && (eachMethod.getReturnType().isAssignableFrom(m.getReturnType()) ) )
{
if ( eachMethod.getParameterCount()>0 )
{
Parameter[] pEachMethod = eachMethod.getParameters();
Parameter[] pM = m.getParameters();
for (int index = 0; index < eachMethod.getParameterCount() ; index++)
{
if ( (pEachMethod[index].getClass().isAssignableFrom(pM[index].getClass())) )
{
found = true;
}
}
}
else
{
found = true;
}
}
}
if (found == false)
{
resultat.add(m);
}
}
}
classDescriptor = classDescriptor.getSuperclass();
}

System.out.println("Resultat\n------------------");
System.out.println(resultat.size());

for (Method m : resultat)
{
System.out.println(m.getName());
}

return resultat;
}

public static void main(String[] args) throws ClassNotFoundException{
for(Method m : Introspection.getHeritees("java.util.AbstractCollection")){
System.out.println(m);
}
}

Mais au final cela ne me change strictement rien. Donc j'arrête là encore merci.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité