Obtner los getters
Hay alguna forma de recorre un objeto para obtener la referencia que retorna los getter.
algo dinámico.
Ejemplo
Persona persona = new Persona();
persona.setID(1);
persona.setNombre("JUAN");
persona.setEdad(18);
//Aqui hacer algun bucle para obtener la referencia que retornan los getters.
for(Persona p : persona){
//Aqui obtener los persona.getID(), persona.getNombre(), persona.getEdad(), una forma dinamica sin
escribir cada metodo getXXXX.
}
Saludos.
- Inicie sesión o regístrese para enviar comentarios
Si usando Reflection
Como escribí acá
Pero no debes de usarlo a menos que sepas que implicaciones tiene. Como bien menciona bferro ahi mismo, es muy costoso ( sobre todo si se puede evitar ) En ese ejemplo yo lo usé como debugger ( en un lugar donde no podía usar un debugger ) y después lo quité.
La alternativa ( que a veces yo ocupo ) es imprimirlos y luego hacer un copy paste de esa salida en mi código jejeje, así ya quedan bien escritos y se compilan correctamente.
Algo de eso me dijo google
Primero me indagare sobre reflection gracias.
Reducción del costo
Según lo que he estado leyendo de Scala en estos momentos, con Scala puedes hacerlo de manera menos costosa (aunque no sé si de manera más complicada o simple). Dado a la "naturaleza" propia de Scala.
Esta es una desventaja de los lenguajes compilados, la reflexión y demás cosas que se deben (o se tienen que) hacer en runtime.
Y porque no simplemente le
Y porque no simplemente le das click al link y que te pasé y ves como se hace?
¿Que es lo que quieres hacer? Quizá haya otra forma
jajaj
Sí caray, esa gran desventaja de los lenguajes compilados. En los interpretados no es desventaja porque todo es igual de lento...
Lo que intento hacer
No quiero estar poniendo puesto.getBlablabla, obtenerlos de alguna manera manera recorriendo el objeto, sería más practico al usarlo en distintas tablas de BD.
public class PuestoModel {
private String[] items = {"pue_codigo","pue_nombre","pue_descripcion"};
private String table="puestos";
public void guardarActualizar(Puesto puesto){
String sql="";
try {
if(puesto.getId()==0){
puesto.setId(autoincremento());
sql="INSERT INTO "+table+" ("+items[0]+","+items[1]+", "+items[2]+") VALUE ("+puesto.getId()+",'"+puesto.getNombre()+"','"+puesto.getDescripcion()+"')";
}else{
sql="UPDATE "+table+" SET "+items[1]+"='"+puesto.getNombre()+"',"+items[2]+"='"+puesto.getDescripcion()+"' WHERE "+items[0]+"="+puesto.getId()+"";
}
ControladorBD.addSql(sql);
ControladorBD.execute();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
no se podría hacer un solo
no se podría hacer un solo get()? que contenga todos lo datos que necesitas en un orden que necesitas y manipularlo para después insertarlo a una base de datos?
Ahh vaya.. y supongo que
Ahh vaya.. y supongo que tampoco quieres usar un framework que haga esto por tí como Hibernate?
Lo que yo haría es algo como esto ( siguiendo la recomendación de ezamudio) :
Por ejemplo en la siguiente clase:
Me sale:
Después eso lo puedes copy/paste'ear en tu código y listo.
Por cierto es mucho mejor usar un prepared statement sobre todo si los datos vienen de fuera. Acuerdensé de Bobby tables
No entendi a que te refieres
podrias explicarlos con palitos y bolitas.
Entendido oscar
Gracias oscar entendido
Dudilla con los i
los [i] se remplazan con posiciones
[0]
[1]
[2]
Si lo que no entendiste es lo
Si lo que no entendiste es lo de Bobby tables, considera que pasaría si el puesto se llamara:
Tip: Usa Prepared statements para evitar un ataque de SQL Injection
Okay usare Prepared statements ultima dudilla
public void guardarActualizar(Puesto puesto){
//En esta parte van los elementos del vector items?
items[0]=persona.getId();
items[1]=persona.getNombre();
items[1]=persona.getDescripcion();
try {
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
Re: jajaj
Cierto, el desempeño es una de las desventajas del scripting. Pero a nivel de reflexión y metaprogramación es casi transparente, hacerlo con Ruby (¬¬, si otra vez más metiendo a Ruby jeje) es simple e incluso es muchas veces el uso de los lenguajes de script (o al menos es lo que he visto/leído, favor de corregir si estoy mal).
Pero es cierto que por ejemplo Ruby es infinitamente más lento que Java...Lo último que supe era que Python era el lenguaje de scripting más rápido y pues la verdad he visto a más de uno con cosas así.
Por cierto, Java también es
Por cierto, Java también es interpretado pero su tipeo estático le da una ventaja extra. Además su intérprete ( la JVM ) es muuuuuy bueno y puede crear código de máquina en tiempo de ejecución. A diferencia de lenguajes como C o C++ que una vez que el código fue creado no puede hacer más optimizaciones.
Sé que es un tanto offtopic
Estaba leyendo la documentación en la liga pero por lo que leo, los Prepared Statements son para mandar un precompilado de la sentencia SQL al DBMS. Nunca he usado ese tipo de objeto, siempre creaba mi método de 0 que depuraba todo lo que pudiese ser una sentencia "envenenada" para SQL Injection. ¿El PreparedStatement ya regresa una sentencia precompilada y depurada de todo caracter explotable por SQL Injection?
sí
PreparedStatement es una sentencia lista para enviarse al servidor de base de datos, con el SQL por una parte y los parámetros por separado, de modo que no sea posible inyección de SQL.