Duda con instancias en Java

Iniciado por alf4139, 27 Febrero 2018, 20:56 PM

0 Miembros y 1 Visitante están viendo este tema.

alf4139

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);


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;
}



rub'n

#1
Código (java) [Seleccionar]
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)

Código (java) [Seleccionar]
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 (java) [Seleccionar]
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 (java) [Seleccionar]
Vector vectorSubMenu = (Vector) request.getAttribute("submenu");

Código (java) [Seleccionar]
cvsubmenu = (MenuSubBeanData) vectorSubMenu.get(n);


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

alf4139

Hola rub'n, gracias por tu respuesta y explicacion, pero sigo con dudas, entiendo que:

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: 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:
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;
}

}