Quiero crear una instancia de una clase por el valor de una cadena. Encontré varios tutoriales que muestran varios métodos para hacer esto. La clase DEBE heredar de una cierta interfaz, ImplementMe
que tiene un método especial llamado runMe()
. Así que esto es lo que probé:Cargando una clase desde una cadena
ImplmentMe a =
(ImplementMe) ImplementMe.class
.getClassLoader()
.loadClass("my.package.IImplementedYou")
.newInstance();
a.runMe();
Funciona, pero es muy feo. Al menos esperaba no necesitar un elenco. Por favor dime que hay una mejor manera.
Necesitarás el reparto independientemente. El compilador no puede promover automáticamente 'Object' a' ImplementMe'. –
Eso es tan extraño. Pensé que al usar 'ImplementMe.class.getClassLoader()', tomaría la sugerencia de que la clase debe heredar de 'ImplementMe'..oh bien. – User1
'Class' tiene un método' asSubclass'. Entonces '... loadClass (...). AsSubclass (ImplementMe.class) .newInstance()' devolverá una instancia 'ImplementMe' (si tiene éxito). – user2478398