ejercicios - implementacion de interfaces en java
Lista de clases que implementan una interfaz (2)
¿Hay alguna manera de implementar algo así como
List<Class<? implements MyInterface>> ClassList = new ArrayList<Class<? implements MyInterface>>();
mi objetivo es crear un hashmap a partir de esa lista, donde las claves son los métodos toString de la clase (definidos en MyInterface) y los valores son las clases en sí. El método toString de cada objeto de esta clase devuelve el mismo resultado. De esta forma podría crear instancias de las clases usando el mapa buscando las cadenas correctas.
gracias por tratar de ayudar, saludos
Como parece interesado por la forma en que lo expliqué, aquí hay una implementación rápida para verificar que se puede hacer ...
import java.util.ArrayList;
import java.util.List;
enum NumberClass
{
ONE("One"),
TWO("Two"),
THREE("Three");
private final String className;
NumberClass(String name)
{
className = name;
}
String getName()
{
return className;
}
}
public class Test
{
public static void main(String[] args)
{
List<NumberClass> numbers = new ArrayList<NumberClass>();
numbers.add(NumberClass.ONE);
numbers.add(NumberClass.THREE);
numbers.add(NumberClass.TWO);
numbers.add(NumberClass.ONE);
numbers.add(NumberClass.THREE);
numbers.add(NumberClass.ONE);
numbers.add(NumberClass.TWO);
SomeNumber[] nbs = new SomeNumber[numbers.size()];
int i = 0;
for (NumberClass nbC : numbers)
{
SomeNumber nb;
try
{
nb = (SomeNumber) Class.forName(nbC.getName()).newInstance ();
nbs[i++] = nb;
}
// Cleanly handle them!
catch (InstantiationException e) { System.out.println(e); }
catch (IllegalAccessException e) { System.out.println(e); }
catch (ClassNotFoundException e) { System.out.println(e); }
}
for (SomeNumber sn : nbs)
{
System.out.println(sn.getClass().getName() + " " + sn.getValue());
}
}
}
// The following must be in their own files, of course
public interface SomeNumber
{
int getValue();
}
public class One implements SomeNumber
{
public int getValue() { return 1; }
}
public class Two implements SomeNumber
{
public int getValue() { return 2; }
}
public class Three implements SomeNumber
{
public int getValue() { return 3; }
}
Si no responde su pregunta, considérelo como material educativo, espero. :-)
List<Class<? implements MyInterface>> ClassList = new ArrayList<Class<? implements MyInterface>>();
debiera ser
List<Class<? extends MyInterface>> ClassList = new ArrayList<Class<? extends MyInterface>>();
no hay palabra clave implementa en el mundo de los genéricos. si desea un parámetro de tipo que implemente una interfaz, use la palabra clave extends para representarlo.