Foros del Web » Programación para mayores de 30 ;) » Java »

Esto se puede hacer...

Estas en el tema de Esto se puede hacer... en el foro de Java en Foros del Web. Bueno, es solo una idea... tengo algo asi: public enum ListEventosComp {onchange, onclick,ondblclick,onblur,onfocus,onkeypress,onkey down,onkeyup}; private ListEventosComp EventComp; Tengo una clase de cualquier tipo, y en ...
  #1 (permalink)  
Antiguo 26/01/2009, 10:29
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Pregunta Esto se puede hacer...

Bueno, es solo una idea...

tengo algo asi:

public enum ListEventosComp {onchange, onclick,ondblclick,onblur,onfocus,onkeypress,onkey down,onkeyup};
private ListEventosComp EventComp;

Tengo una clase de cualquier tipo, y en ella un método que me carga una acción, y me pasa como parámetro el nombre de la función que desea llamar...

Mejor dicho, como llamar o invocar a un método cuyo nombre se pasa como parametro?

Clase Nombreclass{
public void Nombreclass(){}

//Aqui mi método importante
public void setEventComp(ListEventosComp EventComp,String ProcesoRealizar) {
this.EventComp = EventComp;
//aqui hago una llamada ha mi proceso de nombre(ProcesoRealizar)..

}

}
  #2 (permalink)  
Antiguo 26/01/2009, 10:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Esto se puede hacer...

Dentro de Java, tendrías que usar Reflection.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 26/01/2009, 11:25
 
Fecha de Ingreso: enero-2009
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Esto se puede hacer...

yo se que existe un metodo que se llama "getClass()" que retorna el nombre de la clase desde la que estas llamando. Quizás si indagas tienes algún método que devuelva el nombre del método.

En fin, se que no es de gran ayuda, pero lo que importa es la intención, no?

Un saludo y mucha suerte!
  #4 (permalink)  
Antiguo 26/01/2009, 11:40
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Esto se puede hacer...

Hola,

En su forma mas básica sería algo así:

Código:
import java.lang.reflect.*;

public class Proc {

  public enum Procs { A, B }
  
  private void invoke(Procs p) {
    try {
      Class c = Class.forName("Proc");
      Object t = c.newInstance();
      Method m = c.getDeclaredMethod(p.name());
      m.setAccessible(true);
      m.invoke(t);
    } catch (Exception e) {
      System.err.println(e);
    }
  }
  
  private void A() {
    System.out.println("Function A");
  }
  
  private void B() {
    System.out.println("Function B");
  }
  
  public static void main(String[] args) {
    Proc p = new Proc();
      p.invoke(Procs.A);
  }
  
}
http://java.sun.com/docs/books/tutor...ect/index.html
http://java.sun.com/javase/6/docs/ap...e-summary.html

En mi opinión personal, Reflection se usa cuando no hay otra forma de conocer los métodos existentes de una clase, por ejemplo, cuando se crea un programa que se puede extender por medio de plug-ins (Java Beans), pero en la mayoría de los casos es preferible evitarlo y usar programación estándard.

Saludos,

Última edición por HackmanC; 26/01/2009 a las 11:43 Razón: beans
  #5 (permalink)  
Antiguo 26/01/2009, 16:44
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
De acuerdo Respuesta: Esto se puede hacer...

Cita:
Iniciado por iozan Ver Mensaje
yo se que existe un metodo que se llama "getClass()" que retorna el nombre de la clase desde la que estas llamando. Quizás si indagas tienes algún método que devuelva el nombre del método.

En fin, se que no es de gran ayuda, pero lo que importa es la intención, no?

Un saludo y mucha suerte!
Vale, gracias...
  #6 (permalink)  
Antiguo 26/01/2009, 16:48
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Esto se puede hacer...

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

En su forma mas básica sería algo así:

Código:
import java.lang.reflect.*;

public class Proc {

  public enum Procs { A, B }
  
  private void invoke(Procs p) {
    try {
      Class c = Class.forName("Proc");
      Object t = c.newInstance();
      Method m = c.getDeclaredMethod(p.name());
      m.setAccessible(true);
      m.invoke(t);
    } catch (Exception e) {
      System.err.println(e);
    }
  }
  
  private void A() {
    System.out.println("Function A");
  }
  
  private void B() {
    System.out.println("Function B");
  }
  
  public static void main(String[] args) {
    Proc p = new Proc();
      p.invoke(Procs.A);
  }
  
}
http://java.sun.com/docs/books/tutor...ect/index.html
http://java.sun.com/javase/6/docs/ap...e-summary.html

En mi opinión personal, Reflection se usa cuando no hay otra forma de conocer los métodos existentes de una clase, por ejemplo, cuando se crea un programa que se puede extender por medio de plug-ins (Java Beans), pero en la mayoría de los casos es preferible evitarlo y usar programación estándard.

Saludos,
Ohhh, se fajaron... Hack y GreenEyed. Naturalmente lo que buscaba basto con el termino reflect, ya que si conocerlo es difícil que Mr. google nos apunte ha informacion de interés y nos la podemos pasar horas intentando infructuosamente.

Y precisamente es para plug-ins y (Java beans), muchas veces cuando comienzas algo con poco conocimiento y te resultan ideas, que cuando descubres alguien mas a pensado exactamente lo
mismo, lo ha echo y se piensa... sera que tengo tan poca imaginación?.

Gracias...

Última edición por SPAWN3000; 26/01/2009 a las 17:01
  #7 (permalink)  
Antiguo 27/01/2009, 01:38
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Esto se puede hacer...

De todas formas, como dice Hankman reflection es sólo para el caso en que no conozcas nada de antemano. Si uno va a hacer un sistema "extensible" con puntos controlados, es múcho más eficiente definir interfaces o clases abstractas que los plugins deban implementar/extender y trabajar sobre eso en vez de usar reflection.

La razón básica es que el código usando reflection es más complicado de entender, lo cual implica más tiempo de desarrollo y mantenimiento, y además es menos eficiente, ya que la "reflexión" se hace en tiempo de ejecución y es más lenta.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:04.