tipo - Convertir dinĂ¡micamente el objeto java de la clase Object en una clase determinada cuando se conoce el nombre de la clase
polimorfismo java (4)
Si lo se. Título largo de la pregunta ... Así que tengo el nombre de la clase en la cadena. Estoy creando dinámicamente el objeto de esa clase de esta manera:
String className = "com.package.MyClass";
Class c = Class.forName(className);
Object obj = c.newInstance();
¿Cómo puedo convertir dinámicamente ese obj en objeto MyClass ? No puedo escribir de esta manera:
MyClass mobj = (MyClass)obj;
... porque className puede ser diferente.
No tiene que convertir el objeto en un objeto MyClass porque ya lo es. Lo que realmente quieres hacer es lanzarlo, pero dado que el nombre de la clase no se conoce en tiempo de compilación, no puedes hacer eso, ya que no puedes declarar una variable de esa clase. Supongo que quiere / necesita algo como "pato escribiendo", es decir, no conoce el nombre de la clase, pero conoce el nombre del método en tiempo de compilación. Las interfaces, según lo propuesto por Gregory, son su mejor opción para hacer eso.
Si no sabía que mojb
es de tipo MyClass
, ¿cómo puede crear esa variable?
Si MyClass es un tipo de interfaz, o un súper tipo, entonces no hay necesidad de hacer un reparto.
Creo que es bastante sencillo con la reflexión
MyClass mobj = MyClass.class.cast(obj);
y si el nombre de la clase es diferente
Object newObj = Class.forName(classname).cast(obj);
no lo hace, declare una interfaz que declare los métodos que le gustaría llamar:
public interface MyInterface
{
void doStuff();
}
public class MyClass implements MyInterface
{
public void doStuff()
{
System.Console.Writeln("done!");
}
}
entonces tu usas
MyInterface mobj = (myInterface)obj;
mobj.doStuff();
Si MyClass
no está bajo su control, entonces no puede hacer que implemente alguna interfaz, y la otra opción es confiar en la reflexión ( consulte este tutorial ).