Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: alf4139 en 27 Febrero 2018, 20:56 pm



Título: Duda con instancias en Java
Publicado por: alf4139 en 27 Febrero 2018, 20:56 pm
Hola a todos , tengo una duda en relacion a un codigo que estoy leyendo, no comprendo bien como funciona la instanciacion en este codigo, por favor si alguien me pueda explicar se lo agradaceria mucho

este codigo no comprendo la linea: cvsubmenu=(MenuSubBeanData)vectorSubMenu.get(n);

Código:
public Vector obtieneSubMenu (String menuElegido , String submenuElegido,
ServletContext sc, HttpServletRequest  request, HttpServletResponse response) throws Exception{
String menu="";
Vector vectorSubMenu=(Vector)request.getAttribute("submenu");
Vector vectorSubMenuMostrar=new Vector();
int n=0;
try {  while (n < vectorSubMenu.size()) {
   MenuSubBeanData cvsubmenu = new MenuSubBeanData();
   cvsubmenu=(MenuSubBeanData)vectorSubMenu.get(n);
//accion=cvsubmenu.getAccion();
menu=cvsubmenu.getMenu();
if (menu.trim().equals(menuElegido))
{
if (cvsubmenu.getSubmenu().trim().equals(submenuElegido)){
cvsubmenu.setSubmenuelegido("current");
}
vectorSubMenuMostrar.add(cvsubmenu);
}
n++;
 }

} catch (Exception exc) {
con.rollback();
throw exc;
 }
return vectorSubMenuMostrar;
}




Título: Re: Duda con instancias en Java
Publicado por: rub'n en 28 Febrero 2018, 20:29 pm
Código
  1. cvsubmenu=(MenuSubBeanData)vectorSubMenu.get(n);

Estas en presencia de un casting explicito (Narrowing Casting)

https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html#get(int) (https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html#get(int))

Código
  1. vectorSubMenu.get(n)

Si usas un IDE y borras justo (MenuSubBeanData) tu ide por medio de Reflection en tiempo de ejecución Runtime debería de quejarse porque el método .get() obtiene el index donde a la vez tiene un Objeto pero no sabe que tipo de objeto en especifico debe asignar,entonces al programador le toca dicha tarea aunque ya los IDE actuales por Reflection lo solucionan

En este caso el Object obtenido de que tipo será ? MenuSubBeanData

Pero como ?


Código
  1. Vector vectorSubMenu = (Vector) request.getAttribute("submenu");

Esta linea seguramente crea el Vector de ese tipo con el metodo getAttribute("submenu")

Recordando que java es fuertemente tipado

Otra manera de saber mas a fondo y con precisión es hacer debugging colando un breakPoint por ejemplo en


Código
  1. Vector vectorSubMenu = (Vector) request.getAttribute("submenu");

Código
  1. cvsubmenu = (MenuSubBeanData) vectorSubMenu.get(n);


Título: Re: Duda con instancias en Java
Publicado por: alf4139 en 3 Marzo 2018, 00:17 am
Hola rub'n, gracias por tu respuesta y explicacion, pero sigo con dudas, entiendo que:

Código:
request.getAttribute("submenu");


devuelve string, pueden ser varios string que son casteados al mismo tipo del objeto 'vectorSubMenu' que es un Vector, es decir, se obtiene un vector con la coleccion de strings, ¿correcto?

La linea:
Código:
cvsubmenu = (MenuSubBeanData) vectorSubMenu.get(n);

entiendo castea un string(un elemento del vector) al tipo 'MenuSubBeanData' pero que obtengo en 'cvsubmenu'?; MenuSubBeanData es una clase que tiene propiedades, getters y setters y demas metodos, que debo interpretar de esa linea mas alla de las correspondencias entre tipos de objetos y sus declaraciones.

Digamos que la Clase MenuSubBeanData se defina asi:
Código:
public class MenuSubBeanData{
        private String menu="";
        private String submenu="";
        private String descripcion="";

        public String getMenu() {
return menu;
}
public void setMenu(String menu) {
this.menu = menu;
}
        public String getSubmenu() {
return submenu;
}
public void setSubmenu(String submenu) {
this.submenu = submenu;
}
        public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}

}