Para ello nos podemos valer de dos utilidades: Las Interfaces y el Objeto Class:
Interfaces:
Una interfaz en Java es una clase en la que todos sus métodos son abstractos. En ellas se especifica qué se debe hacer pero no su implementación.
Class:
Tiene un método llamado "forName(String)" que permite buscar una clase dinámicamente.
En el ejemplo que he creado, se puede pasar por como argumento de aplicación una cadena de texto que servirá para localizar la clase:
INTERFAZ - IJuego.java
package juegos;
public interface IJuego {
boolean doInit();
boolean doClientAction(int usuario_id, Object response);
boolean doEnd();
}
IMPLEMENTACION - JuegoA.java
package juegos.implementation;
import juegos.IJuego;
public class JuegoA implements IJuego {
@Override
public boolean doInit(){
System.out.println("doInit juego 11: " + this.getClass().getName() );
return true;
}
@Override
public boolean doClientAction(int usuario_id, Object response){
return true;
}
@Override
public boolean doEnd(){
return true;
}
}
UTILIZACION DINAMICA - Principal.java
import juegos.IJuego;
public class Principal {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String classname = null;
if (args.length > 0) {
classname = (String) args[0];
}
if(classname!=null){
System.out.println("Nombre de clase definido como argumento");
new Principal().initGame( classname );
}else{
new Principal().initGame("juegos.implementation.JuegoC");
}
}
private void initGame( String nombreclase ){
IJuego juego;
Class instancia;
try{
instancia = Class.forName( nombreclase );
juego = (IJuego) instancia.newInstance();
juego.doInit();
}catch( Exception e ){
System.out.println( "Exepción: " + e.getMessage() );
e.printStackTrace();
}
}
}
Fuentes (proyecto java en eclipse)
1 comentario:
aaaaaahhhhhhh
Publicar un comentario