Cómo crear un nuevo objeto en función de la implementación de interfaces

Mariosyian:

En primer lugar, creo que mi pregunta está mal redactado, pero realmente no entiendo cómo expresarlo.

Tengo una interfaz de inicio que está siendo implementado por un número de clases. Lo que quiero hacer es ver si hay una manera de crear un nuevo objeto de tal manera que estoy siendo pasada la interfaz genérica, a continuación, basado en el método .getClass (). GetSimpleName (), cree un nuevo objeto en función de esa cadena .

Es la única manera de crear una declaración de caso interruptor? A medida que el número de clases que implementan son demasiados (alrededor de 100 más o menos).

Código de referencia:

public interface MyInterface {
  public void someMethod();
}

entonces yo tendría mis clases de ejecución:

public class MyClass1 implements MyInterface {
  public void someMethod() { //statements }
}

public class MyClass2 implements MyInterface {
  public void someMethod() { //statements }
}

public class MyClass3 implements MyInterface {
  public void someMethod() { //statements }
}

Lo que quiere tener al final es otra clase que se pasa un argumento de tipo MyInterface, obtener el nombre sencillo de eso y crear una nueva instancia de MyClassX basado en ese simple nombre.

public class AnotherClass {
  public void someMethod(MyInterface interface) {
    if (interface == null) {
      System.err.println("Invalid reference!");
      System.exit(-1);
    } else {
      String interfaceName = interface.getClass().getSimpleName();
      /**
       * This is where my problem is!
       */
      MyInterface newInterface = new <interfaceName> // where interfaceName would be MyClass1 or 2 or 3...
    }
  }
}

¡Cualquier ayuda es muy apreciada!

Marcos Bramnik:

Puede utilizar la reflexión para esto:

public void someMethod(MyInterface myInterface) {
Class<MyInterface> cl = myInterface.getClass();
MyInteface realImplementationObject = cl.newInstance(); // handle exceptions in try/catch block
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=362988&siteId=1
Recomendado
Clasificación