Supongo que esta es una vez más una pregunta de "mejores prácticas" porque puedo pensar en algunas formas poco elegantes de implementar mi caso de uso.

Mi caso de uso es el siguiente
Estoy escribiendo un módulo MethodManager (una especie de) que ayuda al usuario final a lidiar con las llamadas reales al método (función) a través de una interfaz de usuario.
Para este propósito específico, tengo una clase methodDefinition que es una forma de objeto de cómo se ve un método (función) en mi sistema.
Una breve descripción de cómo se ven los miembros de mi methodDefinition es la siguiente

methodName -- String
methodInputs -- ArrayList<String>
methodResultType -- enum(STRING,MAP,LIST)
methodResult  -- <<variable, on the basis of methodResultType>>

Ahora methodResult es variable y puede ser cualquiera de String, Map o List según el método que se establezca como methodResultType.

He creado una clase MethodResultType para dar cuenta de methodResultType y se ve de la siguiente manera

public enum MethodResultType {
    LIST,
    MAP,
    STRING;
    }

Ahora sé que tengo que escribir una clase para dar cuenta de methodResult y su naturaleza variable basada en methodResultType, pero no puedo pensar en una forma que no sea chapucera.

Cualquier sugerencia / consejo al respecto será muy apreciado.

Gracias
p1ng

0
ping 27 feb. 2012 a las 21:13

1 respuesta

La mejor respuesta

List, Map y String tienen una clase de ancestro común: java.lang.Object. methodResult puede entonces ser un Objeto.

También puede envolver el resultado y su tipo en un objeto MethodResult, que proporcionaría métodos como getType(), getValueAsString(), getValueAsList() y getValueAsMap(). Estos últimos tres métodos arrojarían una IllegalStateException si el tipo de valor no es el tipo devuelto por el método.

2
JB Nizet 27 feb. 2012 a las 21:21
Gracias @JB Nizet. Esto tiene sentido. Estoy aceptando esto como una respuesta.
 – 
ping
28 feb. 2012 a las 08:37