Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Cree diferentes clases de Java basadas en el texto de configuración de tiempo de ejecución

Tengo una suite que puede ejecutar algunas operaciones con diferentes parámetros. Las operaciones y sus parámetros se proporcionan en un archivo de configuración XML.

Hay una clase separada que implementa cada operación. Todas estas clases amplían una clase de operación abstracta, por lo que una vez que se crea la clase, se puede manejar de la misma manera en el código, cualquiera que sea la operación real.

Sin embargo, necesito crear las clases. Y hasta ahora veo dos formas de hacerlo:

  • una declaración de cambio:

     Operation operation; switch (operationName) { case "OperationA": operation = new OperationA(); break; case "OperationB": operation = new OperationB(); break; default: log.error("Invalid operation name: " + operationName); return true; }
  • Una búsqueda en tiempo de ejecución de un nombre de clase. Nunca probé esta opción, pero parece ser algo como:

     Operation operation = (Operation)Class.forName(operationName).newinstance();

La primera opción parece difícil de manejar. La segunda opción parece confiar demasiado en la configuración, aunque no estoy seguro de esto.

¿Quizás debería simplemente verificar que OperationName es miembro de un conjunto o lista predefinida que contiene todas mis operaciones (o establecer los posibles valores en piedra en un esquema XML y verificar la configuración contra él), luego usar la segunda opción? ¿O hay algo mejor?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Yo preferiría usar la segunda opción.

Una clase de ejemplo. (Tenga en cuenta que se requiere el constructor predeterminado porque lo llama .newInstance(). También puede consultar esta pregunta: ¿Puedo usar Class.newInstance() con argumentos de constructor? si desea crear una nueva clase y usar un constructor con parámetros).

 package com.mypackage; public class SomeObject { public SomeObject() {} }

Cómo crear una instancia de esa clase:

 try { // you need to use the fully qualified name, not just the class name SomeObject object = (SomeObject) Class.forName("com.mypackage.SomeObject").newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { // here you can handle incorrect config in your XML file }

También puede tener una lista de nombres calificados en otro archivo de configuración o propiedad y verificar esa lista antes de intentar crear una clase.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda