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

Acceso dinámico propiedades y métodos java

Estas en el tema de Acceso dinámico propiedades y métodos java en el foro de Java en Foros del Web. Me gustaría conocer algún método que me diga el nombre de todas las propiedades de una clase. Por otra parte quisiera saber cómo poder ejecutar ...
  #1 (permalink)  
Antiguo 06/05/2011, 06:36
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 92
Antigüedad: 16 años, 10 meses
Puntos: 3
Acceso dinámico propiedades y métodos java

Me gustaría conocer algún método que me diga el nombre de todas las propiedades de una clase.

Por otra parte quisiera saber cómo poder ejecutar un método o propiedad de la siguiente manera, por otra parecida.

Código PHP:
public class display_cuestionario extends display {
    
    private 
String [] pro = {"nombre","cabezera","descripcion"}
    private 
String nombre ;
    private 
String cabezera;
    private 
String descripcion;
    private 
String mensajeFinRespuesta;
    private 
String mensajeBienvenida;
        
    
    public 
void setAtt(String pro String value)
    {
        
this.(propiedad) = value // este method es el que quiero hacer..

        
    
}

        
//Los getters y settters....


Gracias de antemano. Tengo que decir que llevo en Java 1 mes y el resto del tiempo que le he dedicado a la programación ha sido mayoritariamente en PHP.


*Nota
Cualquier proposición que me lleve a conseguir ese objetivo será bienvenida ... ¡¡

Última edición por rimobio; 06/05/2011 a las 06:58
  #2 (permalink)  
Antiguo 06/05/2011, 07:58
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Acceso dinámico propiedades y métodos java

Aunque se puede hacer lo que dices, tu problema es que estás enfocándolo como si esto fuera PHP, y no lo es. Debes cambiar la forma de hacer las cosas.

Para hacer lo que dices, puedes utilizar perfectamente un Map.

http://download.oracle.com/javase/6/.../util/Map.html
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 06/05/2011, 11:39
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 92
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Acceso dinámico propiedades y métodos java

Gracias Xerelo

Lo he probado y funciona perfecto.

Mi ejemplo
Código PHP:
//main.java
import controlador.display;
import controlador.obj.casa;
import controlador.obj.piso;


public class 
main {
    
    
     public static 
void main(final String[] args)
     {
         
display dis = new display();
         
casa ca = new casa(2,"Casa");
         
piso pi = new piso("Piso",2);
         
dis.Load("casa"ca);
         
dis.Load("piso"pi);
         
         
         
System.out.println("Casa: " dis.getObj("casa").toString() );
         
System.out.println("Piso: " dis.getObj("piso").toString() );

[
B]                 //Lo que verdaderamente me gustaria seria algo así..
                     
dis.casa.dueño.toString(); [/B]
     
}

Código PHP:
//display.java

package controlador;

import java.util.HashMap;
import java.util.Map;

public class 
display {
    
    private 
Map<String,Objectmpdisplay = new HashMap<String,Object>();
    
    public 
void Load(String name Object obj)
    {
        
mpdisplay.put(nameobj);
    }
    
    public 
Object getObj(String name)
    {    
        return (Object) 
mpdisplay.get(name);        
    }



Código PHP:
//piso.java  y casa.java
package controlador.obj;

public class 
piso {
    
    private 
String due&#241;o;
    
private Integer num;
    

    @
Override
    
public String toString() {
        return 
"piso [dueño=" due&#241;o + ", num=" + num + "]";
    
}
    public 
piso(String due&#241;o, Integer num) {
        
super();
        
this.due&#241;o = dueño;
        
this.num num;
    }
    
    public 
String getDue&#241;o() {
        
return due&#241;o;
    
}
    public 
void setDue&#241;o(String dueño) {
        
this.due&#241;o = dueño;
    
}
    public 
Integer getNum() {
        return 
num;
    }
    public 
void setNum(Integer num) {
        
this.num num;
    }
    
    
}

package controlador.obj;

public class 
casa {
   
    private 
Integer pisos;
    private 
String calle;
    

    @
Override
    
public String toString() {
        return 
"casa [pisos=" pisos ", calle=" calle "]";
    }
    public 
casa(Integer pisosString calle) {
        
super();
        
this.pisos pisos;
        
this.calle calle;
    }
    
    
    
    public 
Integer getPisos() {
        return 
pisos;
    }
    public 
void setPisos(Integer pisos) {
        
this.pisos pisos;
    }
    public 
String getCalle() {
        return 
calle;
    }
    public 
void setCalle(String calle) {
        
this.calle calle;
    }


Lo que busco es poder llamar a una propiedad así
Código PHP:
 dis.casa.due&#241;o
 
dis.piso.num 
Sin usar metodos... hay algún modo de hacer este tipo de cosas en Java.
  #4 (permalink)  
Antiguo 06/05/2011, 11:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 29
Antigüedad: 14 años
Puntos: 0
Respuesta: Acceso dinámico propiedades y métodos java

te sugiero un HashMap

aunque tambien te sugiero bastante mi libreria, te podria servir, implementa un map, aunque de manera un poco diferente.

http://www.youtube.com/watch?v=guDfbdlTf1s


te dejo mi pagina http://javahelp.freeiz.com
  #5 (permalink)  
Antiguo 06/05/2011, 12:09
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 92
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Acceso dinámico propiedades y métodos java

White_King la verdad muy interesante me la guardo. :D
jeje llevo menos d 1 mes en Java y tengo cierta ansia.. jeje por saber hacer cosas con fundamento yaa.. jej Bueno exactamente estoy con JSF.
Gracias me guardo tu pagina..

Pero esta duda es de puro Java.. jej

Mi idea es acceder sin metodo alguno a las "propiedades" que a su vez son dinamicas de un objeto que tiene propiedades fijas..

Vamos esto mismo dis.getObj("casa").dueño pero sin getObj("TAL TAL..") . dis.casa.dueño


Quizás la pregunta es tonta, disculparme en ese caso soy noob en Java.
Gracias de antemano.
  #6 (permalink)  
Antiguo 06/05/2011, 12:23
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Acceso dinámico propiedades y métodos java

Deberías leer algún manual básico de java.

Si tú declaras las propiedades (mejor atributos) de un objeto como private, no puedes acceder desde el exterior del objeto, de ahí la utilización de los getter y setters.

Cita:
dis.getObj("casa").toString()
Esto es lo correcto y como se debe programar, aunque por haber sobreescrito el método toString de casa, te puedes ahorrar el toString().

Si quieres hacerlo como tú dices

Cita:
dis.piso.num
Declara los atributos como public, es válido y escribes menos, pero si quieres aprender a programar correctamente desde el principio, déjalo con los getters y los privates. En muchos framework es obligatorio usarlos, por ejemplo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 06/05/2011, 15:12
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 92
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Acceso dinámico propiedades y métodos java

Xerelo , por su puesto que esa solución la tenia clara poner todo Public y alee ¡¡

Pero se que eso es Bad Programer y no queda muy bonito hacerlo.

Pero de todos modos Java aun así...
Me obligaría ha hacer esto :

Código PHP:
dis.mpdisplay.get("casa").num//Todo public 
//Antes creo que me he confundido..
Código PHP:
dis.getObj("piso").getNum(); //Todo Private 
//Lo que busco
Código PHP:
dis.piso.num
//siendo piso un atributo añadido al Map
  
dis.Load("piso", new piso("AQUI LOS ATRIBUTOS QUE SEAN...")); 
Ya que las propiedades que le quiero dar a Display, necesito que sean dinamicas .

La verdad, entiendo que me veas como si fuera mal programador .. pero ponte en mi lugar yo vivo de las Matrices de php , de sus juegos con eval... y demás cosas que te permiten solucionar muchos problemas y me siento cojo y si alomejor le estoy pidiendo demasiado a Java. :(

Última edición por rimobio; 06/05/2011 a las 15:18
  #8 (permalink)  
Antiguo 06/05/2011, 17:29
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 10 meses
Puntos: 39
Respuesta: Acceso dinámico propiedades y métodos java

Deberías, a parte de aprender Java poco a poco y cambiar el chip de PHP a Java, repasar toda la teoría de POO. Una clase con atributos dinámicos va en contra de la teoría de POO y es una práctica muy mala.

No es que a Java le estés pidiendo más que a PHP, es que Java es mucho más robusto que PHP e impone restricciones que no impone PHP (y que debería imponer). Creo que te has acostumbrado a programar mal en POO con PHP ya que PHP tiene muchos trucos para no hacer las cosas como deben hacerse (porque suelen requerir más esfuerzo) y estás trasladando todas las malas prácticas de PHP a Java, pero como Java es más robusto que PHP te encuentras con todos los problemas que no solucionaste como debías en PHP.
  #9 (permalink)  
Antiguo 07/05/2011, 04:12
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Acceso dinámico propiedades y métodos java

Cita:
La verdad, entiendo que me veas como si fuera mal programador ..
No he dicho eso, he dicho que java y PHP son distintos, y que tenías que cambiar el modo de pensar.

Cita:
dis.piso.num;
//siendo piso un atributo añadido al Map
dis.Load("piso", new piso("AQUI LOS ATRIBUTOS QUE SEAN..."));
Si usas un Map, lo de dis.piso.num no lo puedes hacer, porque la forma de recuperar objetos de un Map es mediante el método get(key) de los Map.

Sobre utilizar atributos dinámicos o no, es cuestión de opiniones y de la situación, hace algún tiempo leí un libro donde recomendaban usarlos en ciertos casos.

http://www.forosdelweb.com/f45/atrib...s-maps-783831/
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #10 (permalink)  
Antiguo 08/05/2011, 10:40
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 92
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Acceso dinámico propiedades y métodos java

Cita:
Iniciado por _Ruben_ Ver Mensaje
Deberías, a parte de aprender Java poco a poco y cambiar el chip de PHP a Java, repasar toda la teoría de POO. Una clase con atributos dinámicos va en contra de la teoría de POO y es una práctica muy mala.

No es que a Java le estés pidiendo más que a PHP, es que Java es mucho más robusto que PHP e impone restricciones que no impone PHP (y que debería imponer). Creo que te has acostumbrado a programar mal en POO con PHP ya que PHP tiene muchos trucos para no hacer las cosas como deben hacerse (porque suelen requerir más esfuerzo) y estás trasladando todas las malas prácticas de PHP a Java, pero como Java es más robusto que PHP te encuentras con todos los problemas que no solucionaste como debías en PHP.
No quiero entran en debates sobre (PHP vs JAVA) porque yo he escrito aquí para ver si Java tiene soluciones a lo que busco, si hay algún método de realizar lo mismo, si tiene cosas escondidas que no se aun y me pueden ayudar a programar más rápido estructuras de clases, y demás cosas que seguramente no conozco de la profundidad de java y me gustarían saber…

Tu quizás piensas que la robustez es lo mejor que hay en el mundo y yo creo que somos los programadores y los analistas los que tenemos que saber que hacemos exactamente con cada método, propiedad que usamos, y tener flexibilidad para crea un diseño que se adecue mejor a lo que buscamos, Y que el lenguajes se adapte a las solución, no al contrario. Pero esta es meramente mi opinión.

En PHP es posible seguir las reglas de POO con un objeto que tenga propiedades dinámicas
http://es.w3support.net/index.php?db=so&id=829823

Yo no sé, si has programado en PHP, en ese caso acepto que lo critiques, ya que es cierto que no se hizo como lenguaje POO y es normal que Java que si se hizo con este fin, pues tenga cierto control más avanzado. Pero eso no significa que en PHP se programe mal en POO, la encapsulación existe con métodos mágicos como __get , __set , __call … etc. Y estos métodos dan al POO de PHP la flexibilidad de hacer aquello que quieras.

Como ya comente llevo 1 mes en Java y no tengo argumentos para poder alabarlo ni criticarlo, y no lo hago, o al menos no es mi intención, simplemente busco, soluciones a métodos, tareas, funciones… que yo antes realizaba en PHP, y ahora las tengo que solucionar en Java para usarlas en JSP.
PHP Y JAVA No son iguales, y me tengo que adaptar a Java es una realidad, pero darme tiempo, tengo que ir solucionando problemas y por eso vengo a este Gran Foro a pedir a los que más sabéis de Java que me digáis, “Pues sí, eso se puede hacer así o asa… ” , ”No tío, eso no se puede hacer.. Pero mira a ver si esta otra idea te vale.. ” , “Claro que se puede, hay un modo de hacer una súper-relación que te ayuda ….. ala ala… ” para esto estoy en este foro para aprender.

La verdad, he estado pensando si era necesario que te conteste o no, y sinceramente no lo hubiera hecho si llego a ver soluciones y no criticas destructivas y nada productivas como me has dado, en todo caso pido disculpas anticipas por si en algún momento he llegado a ofender a Java ya que esta no ha sido mi intención.
  #11 (permalink)  
Antiguo 08/05/2011, 11:21
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 10 meses
Puntos: 39
Respuesta: Acceso dinámico propiedades y métodos java

Cita:
Iniciado por rimobio Ver Mensaje
No quiero entran en debates sobre (PHP vs JAVA) porque yo he escrito aquí para ver si Java tiene soluciones a lo que busco, si hay algún método de realizar lo mismo, si tiene cosas escondidas que no se aun y me pueden ayudar a programar más rápido estructuras de clases, y demás cosas que seguramente no conozco de la profundidad de java y me gustarían saber…

Tu quizás piensas que la robustez es lo mejor que hay en el mundo y yo creo que somos los programadores y los analistas los que tenemos que saber que hacemos exactamente con cada método, propiedad que usamos, y tener flexibilidad para crea un diseño que se adecue mejor a lo que buscamos, Y que el lenguajes se adapte a las solución, no al contrario. Pero esta es meramente mi opinión.

En PHP es posible seguir las reglas de POO con un objeto que tenga propiedades dinámicas
http://es.w3support.net/index.php?db=so&id=829823

Yo no sé, si has programado en PHP, en ese caso acepto que lo critiques, ya que es cierto que no se hizo como lenguaje POO y es normal que Java que si se hizo con este fin, pues tenga cierto control más avanzado. Pero eso no significa que en PHP se programe mal en POO, la encapsulación existe con métodos mágicos como __get , __set , __call … etc. Y estos métodos dan al POO de PHP la flexibilidad de hacer aquello que quieras.

Como ya comente llevo 1 mes en Java y no tengo argumentos para poder alabarlo ni criticarlo, y no lo hago, o al menos no es mi intención, simplemente busco, soluciones a métodos, tareas, funciones… que yo antes realizaba en PHP, y ahora las tengo que solucionar en Java para usarlas en JSP.
PHP Y JAVA No son iguales, y me tengo que adaptar a Java es una realidad, pero darme tiempo, tengo que ir solucionando problemas y por eso vengo a este Gran Foro a pedir a los que más sabéis de Java que me digáis, “Pues sí, eso se puede hacer así o asa… ” , ”No tío, eso no se puede hacer.. Pero mira a ver si esta otra idea te vale.. ” , “Claro que se puede, hay un modo de hacer una súper-relación que te ayuda ….. ala ala… ” para esto estoy en este foro para aprender.

La verdad, he estado pensando si era necesario que te conteste o no, y sinceramente no lo hubiera hecho si llego a ver soluciones y no criticas destructivas y nada productivas como me has dado, en todo caso pido disculpas anticipas por si en algún momento he llegado a ofender a Java ya que esta no ha sido mi intención.
He programado tanto en Java como en PHP, en ambos desde hace tiempo. Tú primero aprendiste PHP y luego Java, yo primero aprendí Java y después PHP.

Lo que pretendes hacer en Java tal y como lo has explicado no se puede. Lo más parecido es la solución que te han dado anteriormente.

Yo no se como has aprendido POO, yo he aprendido en la universidad, y hacer algo como una clase con atributos dinámicos de la forma que explicas era un suspenso directo.

Si explicas cual es el objetivo de esa clase con atributos dinámicos podré darte la solución que yo haría. Lo que yo veo es un fallo en el diseño de las clases que necesitas, estoy casi seguro que la solución es tener 2 o 3 clases en vez de 1, pero para eso necesito saber que es lo que hace la clase que estás implementando.

No entro en debates entre PHP y Java, que en PHP puedan hacerse clases con atributos dinámicos y siga siendo POO no significa que sea una buena práctica de POO. Las buenas prácticas de POO son aquellas independientes del lenguaje, cuando se aprende POO debes aprender para cualquier lenguaje y no para algunos en concreto.

No te he dado una posible solución porque necesito saber que es lo que va a hacer esa clase. Y mucho menos era una crítica destructiva, tan solo te aconsejé aprender con más calma Java y cambiar el chip de PHP a Java porque son muy distintos. Lo que comentaba de la robustez solo es una de las diferencias más notables entre PHP y Java, y no, lo más importante no es la robustez, porque hay otras cosas que son igual o más de importantes. Por supuesto que el programador sepa lo que está haciendo es fundamental. Imagínate que yo hago una clase con atributos dinámicos, yo se lo que estoy haciendo porque soy el creador, pero si te doy el código a ti te llevaría mucho tiempo entenderlo. Cuando tú eres el único programador da igual como hagas las cosas mientras tú sepas lo que haces pero si el día de mañana das ese código a otro programador puede resultarle muy difícil entenderlo si no se hacen las cosas como se deben hacer.

Java no es perfecto, de hecho hay ejemplos de código que muestran algunos fallos de Java en POO y que en otros lenguajes no existen, así que a mi no me importa que "ofendas" a Java, yo sería el primero en criticarlo si tu problema fuese uno de esos casos en los que el problema es de Java.

Pero te repito que si explicas cual es el objetivo de la clase que estás haciendo estaré encantado de darte la solución que yo haría (para no tener que usar atributos dinámicos).

Etiquetas: propiedades
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 07:44.