miércoles, 16 de noviembre de 2016
Estimad@s amig@s les quiero compartir la solución a un error que se me presentó al momento de realizar un autocomplete en Eclipse para llamar a un método dentro de una clase. Lo cual se lo realiza con CTRL + SPACE. El error que salio, fue el siguiente:
Cabe mencionar que este error se suscita cuando en un proyecto Java no se tiene configurado el JDK. Pero en este caso se produjo porque se estaba editando la clase Java apuntando al proyecto principal de Maven, donde no se tiene configurado una unidad de compilación (JDK Library). La solución es editar la clase que se encuentra dentro del proyecto que contiene la clase como módulo. A continuación se expone la gráfica.
Espero les sirve de ayuda, no olviden revisar las redes sociales de Matoosfe, ni subscribirse al canal de youtube. Un abrazo, bendiciones.
jueves, 18 de febrero de 2016
Composite id with FK – JPA
febrero 18, 2016 martosfre
Muchas veces se necesite crear una clave primaria utilizando más de una
columna ya sea que ésta este formado por dos columnas simples o que una
de ellas represente un FK de otra tabla. Para representar esto en JPA utilizaremos el siguiente ejemplo relacional.
En este caso la tabla Mat_Tarea tiene dos PK y una de ellas es FK de la tabla Mat_Proyecto; para realizar el respectivo mapeo en JPA se debe realizar lo siguiente:
En este caso la tabla Mat_Tarea tiene dos PK y una de ellas es FK de la tabla Mat_Proyecto; para realizar el respectivo mapeo en JPA se debe realizar lo siguiente:
- Crear los EntityBean para cada tabla
- Cuando se tiene más de una columna como PK se debe crear una clase por tabla donde se asocia todos los atributos que representan la PK y relacionarlo con la clase padre. En este caso se creará una clase llamada TareaPK como se muestra a continuación. [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; /** * The primary key class for the Mat_Tarea database table. * */ @Embeddable public class TareaPK implements Serializable { //default serial version id, required for serializable classes. private static final long serialVersionUID = 1L; private int idTarea; private int idProy; public TareaPK() { } public int getIdTarea() { return this.idTarea; } public void setIdTarea(int idTarea) { this.idTarea = idTarea; } public int getIdProy() { return this.idProy; } public void setIdProy(int idProy) { this.idProy = idProy; } public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof TareaPK)) { return false; } TareaPK castOther = (TareaPK)other; return (this.idTarea == castOther.idTarea) && (this.idProy == castOther.idProy); } public int hashCode() { final int prime = 31; int hash = 17; hash = hash * prime + this.idTarea; hash = hash * prime + this.idProy; return hash; } } [/code]
- Como último paso se tiene que aumentar los atributos insertable=false y updatable=false en el mapeo de la relación existente en el POJO Tarea con Proyecto para realizar la dependencia. [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; import java.util.Date; import java.util.Set; /** * The persistent class for the Mat_Tarea database table. * */ @Entity @Table(name="Mat_Tarea") public class Tarea implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private TareaPK id; @Temporal( TemporalType.TIMESTAMP) private Date fechaFinTar; @Temporal( TemporalType.TIMESTAMP) private Date fechaIniTar; private String nomTarea; //bi-directional many-to-one association to Proyecto @ManyToOne @JoinColumn(name="idProy", insertable=false, updatable=false) private Proyecto matProyecto; ....... } [/code]
Proyecto [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; import java.util.Date; import java.util.Set; /** * The persistent class for the Mat_Proyecto database table. * */ @Entity @Table(name="Mat_Proyecto") public class Proyecto implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int idProy; private String desProy; @Temporal( TemporalType.TIMESTAMP) private Date fecFinProy; @Temporal( TemporalType.TIMESTAMP) private Date fecIniProy; private String nomProy; //bi-directional many-to-one association to Tarea @OneToMany(mappedBy="matProyecto") private Set<Tarea> matTareas; public Proyecto() { } public int getIdProy() { return this.idProy; } public void setIdProy(int idProy) { this.idProy = idProy; } public String getDesProy() { return this.desProy; } public void setDesProy(String desProy) { this.desProy = desProy; } public Date getFecFinProy() { return this.fecFinProy; } public void setFecFinProy(Date fecFinProy) { this.fecFinProy = fecFinProy; } public Date getFecIniProy() { return this.fecIniProy; } public void setFecIniProy(Date fecIniProy) { this.fecIniProy = fecIniProy; } public String getNomProy() { return this.nomProy; } public void setNomProy(String nomProy) { this.nomProy = nomProy; } public Set<Tarea> getMatTareas() { return this.matTareas; } public void setMatTareas(Set<Tarea> matTareas) { this.matTareas = matTareas; } } [/code] Tarea [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; import java.util.Date; import java.util.Set; /** * The persistent class for the Mat_Tarea database table. * */ @Entity @Table(name="Mat_Tarea") public class Tarea implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private TareaPK id; @Temporal( TemporalType.TIMESTAMP) private Date fechaFinTar; @Temporal( TemporalType.TIMESTAMP) private Date fechaIniTar; private String nomTarea; //bi-directional many-to-one association to Proyecto @ManyToOne @JoinColumn(name="idProy", insertable=false, updatable=false) private Proyecto matProyecto; public Tarea() { } public TareaPK getId() { return this.id; } public void setId(TareaPK id) { this.id = id; } public Date getFechaFinTar() { return this.fechaFinTar; } public void setFechaFinTar(Date fechaFinTar) { this.fechaFinTar = fechaFinTar; } public Date getFechaIniTar() { return this.fechaIniTar; } public void setFechaIniTar(Date fechaIniTar) { this.fechaIniTar = fechaIniTar; } public String getNomTarea() { return this.nomTarea; } public void setNomTarea(String nomTarea) { this.nomTarea = nomTarea; } public Proyecto getMatProyecto() { return this.matProyecto; } public void setMatProyecto(Proyecto matProyecto) { this.matProyecto = matProyecto; } } [/code]
CRUD Java Basico sin BDD
febrero 18, 2016 martosfre
Estimad@s amig@s,
En este post se realizará un ejemplo básico de manejo de operaciones CRUD pero sin base de datos todo manejado a través de collections y bloques estáticos. La aplicación se utilizará es para manejar la compra de vehículos.El proyecto definirá la siguiente arquitectura:
MemoriaBdd.java
[code]
/**
* Clase que representa la badse de Datos
* @author martosfre
* @see www.matoosfe.com
*/
public class MemoriaBDD {
public static Set<vehiculo> vehiculos;
public static Set<cliente> clientes;
public static Set<factura> facturas;
static{
//Inicilializar Facturas
facturas = new HashSet<factura>();
//Inicializar Vehiculos
vehiculos = new HashSet<vehiculo>();
Moto motoUno = new Moto("azul","PBB-987","QMC","2007", new BigDecimal(1567.45d));
Moto motoDos = new Moto("verde","PAL-747","HONDA","2010", new BigDecimal(1000.45d));
vehiculos.add(motoUno);
vehiculos.add(motoDos);
Trailer trailerUno = new Trailer("rojo","UBJ-098","MERCEDES BENZ","2005", new BigDecimal(144000));
Trailer trailerDos = new Trailer("azul","XJT-233","MERCEDES BENZ","2004", new BigDecimal(124000));
vehiculos.add(trailerUno);
vehiculos.add(trailerDos);
Buseta busUno = new Buseta("amarilla","GYT-9889","HYUNDAI","2002", new BigDecimal(75000));
Buseta busDos = new Buseta("amarilla","PKT-956","CHEVROLET","1999", new BigDecimal(55000));
vehiculos.add(busUno);
vehiculos.add(busDos);
//Inicializar clientes
clientes = new HashSet<cliente>();
Cliente clienteUno = new Cliente("Vazquez", "Juan", "1111111189", "Las Casas", "098890988");
Cliente clienteDos = new Cliente("Sanchez", "Luis", "1234567890", "El Dorado", "097090988");
Cliente clienteTres = new Cliente("Prado", "Maria Fernanda", "222222220", "Carapungo", "2345659");
clientes.add(clienteUno);
clientes.add(clienteDos);
clientes.add(clienteTres);
}
}
[/code]En esta clase se hizo uso de bloque estático que permite inicializar objetos o ejecutar procesos automáticos.
Para este caso permitirá inicializar los objetos o “tablas” de nuestro
BDD pero en memoria es decir luego de que la aplicación se cierre todas
las operaciones o los nuevos registros (objetos colocados en cada
collection adicional a los que ya se inicilizan) se perderán.En este post se realizará un ejemplo básico de manejo de operaciones CRUD pero sin base de datos todo manejado a través de collections y bloques estáticos. La aplicación se utilizará es para manejar la compra de vehículos.El proyecto definirá la siguiente arquitectura:
- Tres capas lógicas representadas en tres packages basados en un modelo MVC
- Una clase llamada MemoriaBDD.java que representará nuestra BDD
- El package modelo representará los objetos persistentes o tablas de la BDD .
- El package controlador contendrá toda la lógica de negocio, en esta caso las operaciones CRUD y demás.
- El package vista contendrá las interfaces o formularios que el usuario final llenará o interactuará, en este caso es una clase llamada Principal que recepta los datos desde consola.
MemoriaBdd.java
Ahora voy a explicar la lógica de negocio la cual será implementada en el package controlador en la clases AdminFactura.java, AdminVehiculo.java, AdminCliente.javalas cuales contendrán todas los métodos de negocio. A continuación se muestra las clases en cuestión. AdminCliente.java [code] package com.matoosfe.controlador; import com.matoosfe.modelo.Cliente; /** * Esta clase permitirá manejar toda la lógica de negocio relacionada con clientes * @author martosfre * @see www.matoosfe.com */ public class AdminCliente { /** * Método para guardar un cliente * @param cliente * @return */ public static String guardarCliente(Cliente cliente){ MemoriaBDD.clientes.add(cliente); return "Registro Guardado Satisfactoriamente"; } /** * Método para buscar un cliente por la cédula de identidad * @param cedIn * @return */ public static Cliente buscarClienteByCedula(String cedIn) { Cliente clienteDev = null; for(Cliente cli: MemoriaBDD.clientes){ if(cli.getCedula().equals(cedIn)){ clienteDev = cli; break; } } return clienteDev; } /** * Método para actualizar un cliente * @param cedIn * @param clienteAct * @return */ public static String actualizarCliente(String cedIn, Cliente clienteAct){ guardarCliente(clienteAct); return "Registro actualizado Satisfactoriamente"; } /** * Método para eliminar un cliente * @param cedIn * @return */ public static String eliminarCliente(String cedIn) { Cliente clienteOri = buscarClienteByCedula(cedIn); boolean confEli = MemoriaBDD.clientes.remove(clienteOri); if(confEli){ return "Registro eliminado Satisfactoriamente"; }else{ return "No se pudo eliminar el cliente"; } } } [/code] AdminVehiculo.java [code] package com.matoosfe.controlador; import com.matoosfe.modelo.Vehiculo; /** * * Esta clase permite manipular todas las operaciones relacionadas con Vehiculo * @author martosfre * @see www.matoosfe.com * Aug 18, 2010 */ public class AdminVehiculo { /** * Método para guardar un vehículo * @param vehiculoGen * @return */ public String guardarVehiculo(Vehiculo vehiculoGen){ MemoriaBDD.vehiculos.add(vehiculoGen); return "Registro Guardado Satisfactoriamente"; } /** * Método para buscar un vehículo de acuerdo a la placa y tipo * @param placa * @param tipo * @return */ public static Vehiculo buscarVehiculoPorPlaca(String placa) { Vehiculo vehDev = null; for (Vehiculo veh : MemoriaBDD.vehiculos) { if(veh.getPlaca().equals(placa)){ vehDev = veh; break; } } return vehDev; } } [/code] AdminFactura.java [code] package com.matoosfe.controlador; import java.util.ArrayList; import java.util.List; import com.matoosfe.modelo.Factura; /** * * Esta clase permitirá manejar todas las operaciones relacionadas con Factura * @author martosfre * @see www.matoosfe.com * Aug 18, 2010 */ public class AdminFactura { /** * Método para guardar una factura * @param factura * @return */ public static String guardarFactura(Factura factura){ MemoriaBDD.facturas.add(factura); return "Factura registrada Exitosamente"; } /** * Métodos para buscar facturas por cliente de acuerdo * a la cédula * @param cedCliente * @return */ public static List<factura> buscarFacturasPorCliente(String cedCliente){ List<factura> facturasCliente = new ArrayList<factura>(); for (Factura factura : MemoriaBDD.facturas) { if(factura.getCliente().getCedula().equals(cedCliente)){ facturasCliente.add(factura); } } return facturasCliente; } } [/code] En estas clases se puede apreciar que todas las operaciones CRUD están relacionadas directamente con la clase MemoriaBDD.java en sus atributos representados como collections que para este caso son las tablas de la base de datos. Por último se explicará la clase Formulario.java que se encuentra en el package vista que representa el formulario que será manipulado por el usuario final.
Formulario.java [code] package com.matoosfe.vista; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.matoosfe.controlador.AdminCliente; import com.matoosfe.controlador.AdminFactura; import com.matoosfe.controlador.AdminVehiculo; import com.matoosfe.modelo.Cliente; import com.matoosfe.modelo.DetalleFactura; import com.matoosfe.modelo.Factura; import com.matoosfe.modelo.Vehiculo; /** * * Esta clase representa el formulario de ingreso de la información * para la gestión de la compra de los vehículos * @author martosfre * @see www.matoosfe.com * Aug 18, 2010 */ public class Formulario { public void registrarFactura(){ //Recibo los datos del vehiculos que son los detalles, cliente BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Ingrese el cliente que va a comprar:"); try { String cedIn = br.readLine(); Cliente cliente = AdminCliente.buscarClienteByCedula(cedIn); Factura facturaCompra = new Factura(); List<detallefactura> detallesFactura = new ArrayList<detallefactura>(); BigDecimal subtotal = new BigDecimal(0.0d); BigDecimal total = new BigDecimal(0.0d); System.out.println("\n*************DATOS VEHICULO************"); String placaVeh = "1"; //Registro los vehículos que se vayan a comprar while(!placaVeh.equals("0")){ System.out.print("Ingrese vehículo codigo:"); placaVeh = br.readLine(); //Buscamos al vehículo para registrarlo Vehiculo vehTmp = AdminVehiculo.buscarVehiculoPorPlaca(placaVeh); //Verificamos que si se encontró el vehiculo guardamos el detalle if(vehTmp != null){ //Ingresando cada detalle DetalleFactura detalleTmp = new DetalleFactura(); detalleTmp.setCantidad(1); detalleTmp.setFactura(facturaCompra); detalleTmp.setVehiculo(vehTmp); detalleTmp.setPrecio(vehTmp.getPrecio()); detallesFactura.add(detalleTmp); subtotal = subtotal.add(vehTmp.getPrecio()); } } //Añado detalles y calculo el IVA facturaCompra.setDetalles(detallesFactura); total = subtotal.add(subtotal.multiply(new BigDecimal(0.12d))); //Registro la factura siempre que haya minimo un detalle if(facturaCompra.getDetalles().size() > 1){ facturaCompra.setCliente(cliente); facturaCompra.setFechaCompra(new Date()); facturaCompra.setNumeroFactura(String.valueOf(Math.random())); facturaCompra.setDetalles(detallesFactura); facturaCompra.setSubtotal(subtotal); facturaCompra.setTotal(total); } //Guardamos la factura AdminFactura.guardarFactura(facturaCompra); //Imprimir Registro Compra System.out.println("\n*************DATOS COMPRA************"); System.out.println("Cliente:" + cliente.getNombres() + " " + cliente.getApellidos()); for (Factura fac : AdminFactura.buscarFacturasPorCliente(cliente.getCedula())) { System.out.println("Factura:" + fac.getNumeroFactura()); System.out.println("Total Factura:" + fac.getTotal()); //Imprimir Vehiculos comprados for (DetalleFactura det : fac.getDetalles()) { System.out.println("Vehiculo Marca:" + det.getVehiculo().getMarca()); System.out.println("Vehiculo Modelo:" + det.getVehiculo().getModelo()); System.out.println("Vehiculo Placa:" + det.getVehiculo().getPlaca()); } } } catch (NumberFormatException e) { System.out.println("Error Formato"); e.printStackTrace(); } catch (IOException e) { System.out.println("Error Lectura"); e.printStackTrace(); } //Aqui ya tengo el cliente y todos los vehiculos que quiere comprar } public static void main(String[] args) { Formulario pr = new Formulario(); pr.registrarFactura(); } } [/code]
En esta clase se buscará al cliente que va a comprar el vehículo, luego se registrarán todos los vehículos que se comprarán como un ítem del detalle, asociando al final todos los detalles junto con el cliente a la factura que se guardará o procesará.&
Espero les sirve de mucho, no olviden comentar, compartir. Además les recordamos revisar y subscribirse al canal de Youtube. Saludos
Espero les sirve de mucho, no olviden comentar, compartir. Además les recordamos revisar y subscribirse al canal de Youtube. Saludos
Split con .
febrero 18, 2016 martosfre
Estimados amig@s
Al utilizar el método split sobre una cadena para
obtener el conjunto de valores por una ocurrencia me tope con el
problema que al utilizar el caracter “.” no funcionaba. Al analizar el
método se comprobó que debido a que el método utiliza una expresión
regular regex para buscar la ocurrencia no se
podia hacerlo normalmente por que el . es utilizado como un delimitador;
se tuvo que añadir el caracter de escape \\
Forma Normal – Incorrecta
[code]
String cadena = "1.1.1";
String [] secuencia = cadena.split("."); //No obtiene nada
[/code]
Forma Correcta
[code]
String cadena = "1.1.1";
String [] secuencia = cadena.split("\\."); //Obtiene valor
[/code]
Consideraciones Migración Hibernate a EclipseLink
febrero 18, 2016 martosfre
Estimad@s amigos,
Actualmente existen varias capas de persistencia que se pueden utilizar ya sea como proveedores de persistencia en JPA o independientes entre las cuales se puede citar a : Hibernate, Toplink, DataNucleos y EclipseLink
entre otras. Las mismas que presentan variaciones un poco sensibles al
optar por cambiar de una a otra capa de persistencia, en esta
oportunidad se enumerará algunas de las consideraciones que se debe
tener en cuenta al migrar de Hibernate a EclipseLink entre las cuales se tiene las siguientes:
- En Hibernate se puede escribir HQL directamente sin necesidad de poner un alias al objeto cuando se requiere recuperar alguna atributo, mientras que en EclipseLink es obligatorio.
- En Hibernate se puede escribir HQL para recuperar todas las registros (Select *) obviando la instrucción Select mientras que en EclipseLink se debe colocar.
- En Hibernate se puede utilizar la propiedad
false para mapear automáticamente las entidades mientras que en EclipseLink se debe listarlas. - En Hibernate el uso de List para relacionar entidades requiere anotaciones adicionales a la relación mientras que en EclipseLink son naturales.
Hibernate [code] Query consulta = sesion.createQuery("SELECT distinct idSuc_fk FROM MatSegEmpresaUsuarioInfo"); [/code]
EclipseLink [code] Query consulta = sesion.createQuery("SELECT distinct seg.idSuc_fk FROM MatSegEmpresaUsuarioInfo seg"); [/code]
Hibernate [code]Query consulta = sesion.createQuery("from MatSegEmpresaUsuarioInfo usu");[/code] EclipseLink [code]Query consulta = sesion.createQuery("Select usu from MatSegEmpresaUsuarioInfo usu");[/code]
Espero les sea de mucha utilidad esta ayuda, no olviden compartirlo, dar sus comentarios y seguirnos en las redes sociales: facebook, youtube, twitter.
Problema con Estilo Plugin Social Facebook
febrero 18, 2016 martosfre
Estimad@s amig@s,
Al momento de integrar el plugin social de facebook en nuestro sitio web, pueden tener problemas debido a que internamente el plugin crea dentro del div una sección de span que afecta al diseño del sitio, para lo cual se tiene que modificar el estilo de la siguiente forma: [code] .fb_iframe_widget span { vertical-align: text-bottom !important; height:0px !important; } [/code]
Al momento de integrar el plugin social de facebook en nuestro sitio web, pueden tener problemas debido a que internamente el plugin crea dentro del div una sección de span que afecta al diseño del sitio, para lo cual se tiene que modificar el estilo de la siguiente forma: [code] .fb_iframe_widget span { vertical-align: text-bottom !important; height:0px !important; } [/code]
martes, 16 de febrero de 2016
Librerías JDCB en un solo punto
febrero 16, 2016 martosfre
Estimad@s
Quisiera compartir con ustedes enlaces a los sitios de descarga de las librerías JDBC para las base de datos más comunes. A continuación se las presento.
Espero que haya sido de utilidad, compartamos la información. No olvides seguirnos/mencionarnos en twitter o facebook https://www.facebook.com/MATOOSFE.
- Librerías MYSQL.
- Librerías Postgres.
- Librerías Oracle.
- Librerías SQL Server.
- Librerías SQL Server (Open Source).
- Librerías DB2.
- Librerías Informix.
- Librerías SQLLite
- Librerías Apache Derby.
- Librerías Firebird
Espero que haya sido de utilidad, compartamos la información. No olvides seguirnos/mencionarnos en twitter o facebook https://www.facebook.com/MATOOSFE.
Cadenas de Conexión JDBC
febrero 16, 2016 martosfre
Estimad@s,
Al momento de realizar la conexión a la base de datos utilizando JDBC , siempre se necesita tener a la mano las cadenas de conexión de la base de datos.Por lo que en el siguiente post se mostrará la información de las cadenas de conexión con los driver de las base de datos más comunes.
MySQL
Postgres
Oracle
MySQL
Driver Class: com.mysql.jdbc.Driver
Defautl Port: 3306
JDBC URL: jdbc:mysql://[host][:port]/[database]
Driver Class: org.postgresql.Driver
Defautl Port: 5432
JDBC URL: jdbc:postgresql://host:port/database
Driver Class: oracle.jdbc.driver.OracleDriver
Defautl Port: 1521
JDBC URL:
jdbc:oracle:thin:@machine: port:SID
jdbc:oracle:thin:user/pass@machine:port/SID
SQLServer
Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver
Defautl Port: 1433
JDBC URL: jdbc:microsoft:sqlserver://host:port;databasename=name;user=yourUser;password=yourPwd
Espero que haya sido de utilidad, compartamos la información.
Subir imágenes Servidor - Primefaces
febrero 16, 2016 martosfre
Estimad@s amig@s
En el siguiente recurso se puede apreciar como subir imágenes al servidor utilizando Primefaces 3.5.
Espero que haya sido de utilidad, compartamos la información.No olvides subscribirse a nuestro canal, un vídeo nuevo del curso cada lunes y vídeo de tips entres semana.
Como manejar el Look and Feel
febrero 16, 2016 martosfre
- Plataforma.
- Sistema Operativo.
- API JDK
- Externos
Espero que les haya servido de utilidad, no olviden compartir, subscribirse y sobre todo comentar.
Problemas versiones Jasper vs IReport
febrero 16, 2016 martosfre
Cuando se esté trabajando con reportes con el diseñador de iReport y JasperReport se debe asegurar que la versión con la cual se compile los reportes debe ser la misma de la librería cargada en su proyecto web; es decir, si se creo los reportes con la versión 3.7.4 de iReport se tiene que cargar la librería 3.7.4 de JasperReport para evitar que se produzca la siguiente error:
net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0
Certification Java – Set
febrero 16, 2016 martosfre
Teniendo que la clase NameBean.java es la siguiente:
[code] package com.matoosfe.certification.basico; public class NameBean { private String str; NameBean(String str ){ this.str = str; } /** * @return the str */ public String getStr() { return str; } /** * @param str the str to set */ public void setStr(String str) { this.str = str; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return getStr(); } } [/code]
Cuál es la salida que se muestra al ejecutar el código?
[code] package com.matoosfe.certification.basico; import java.util.HashSet; public class CollClient { public static void main(String []sss) { HashSet myMap = new HashSet(); String s1 = new String("das"); String s2 = new String("das"); NameBean s3 = new NameBean("abcdef"); NameBean s4 = new NameBean("abcdef"); myMap.add(s1); myMap.add(s2); myMap.add(s3); myMap.add(s4); System.out.println(myMap); } } [/code]
Entre las opciones tenemos: a) das abcdef abcdef b) das das abcdef abcdef c) das abcdef d) abcdef abcdef
Para determinar la respuesta correcta deberiamos referirnos a la definición de la colección utilizado en este caso la interfaz Set la cual determina que no se puede tener dos objetos repetidos en la collection, los cuales para ser añadidos a la collection utilizan el método equals con la siguiente sentencia e1.equals(e2). De lo que podemos puntualizar lo siguiente
La opción b) esta incorrecta porque los objetos s1 y s2 a pesar de que tienen el mismo contenido, tienen el mismo hascode (el cual es obtenido en base al contenido) por lo que son iguales, lo que determina que en la collection del tipo Set solo podria estar uno de ellos. A continuación se expone la definición del método hashCode de la clase String donde se puede apreciar lo mencionado. [code] public int hashCode() { int h = hash; if (h == 0) { int off = offset; char val[] = value; int len = count; for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; } [/code]
La opción c) esta incorrecta porque las instancias del Objeto NameBean a pesar de que tienen el mismo contenido no tienen el mismo hashcode ya que son objetos diferentes, diferentes referencias.
La opción d) esta descartada porque en la collection myMap deberia existir al menos un elmento del tipo String y del tipo NameBean
Para terminar por la explicaciones anteriormente expuestas a las anteriores respuestas se concluye que la respuesta correcta es la a) ya que dos objetos son iguales siempre y cuando sean iguales en contenido y referencia (hasCode)
[code] package com.matoosfe.certification.basico; public class NameBean { private String str; NameBean(String str ){ this.str = str; } /** * @return the str */ public String getStr() { return str; } /** * @param str the str to set */ public void setStr(String str) { this.str = str; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return getStr(); } } [/code]
Cuál es la salida que se muestra al ejecutar el código?
[code] package com.matoosfe.certification.basico; import java.util.HashSet; public class CollClient { public static void main(String []sss) { HashSet myMap = new HashSet(); String s1 = new String("das"); String s2 = new String("das"); NameBean s3 = new NameBean("abcdef"); NameBean s4 = new NameBean("abcdef"); myMap.add(s1); myMap.add(s2); myMap.add(s3); myMap.add(s4); System.out.println(myMap); } } [/code]
Entre las opciones tenemos: a) das abcdef abcdef b) das das abcdef abcdef c) das abcdef d) abcdef abcdef
Para determinar la respuesta correcta deberiamos referirnos a la definición de la colección utilizado en este caso la interfaz Set la cual determina que no se puede tener dos objetos repetidos en la collection, los cuales para ser añadidos a la collection utilizan el método equals con la siguiente sentencia e1.equals(e2). De lo que podemos puntualizar lo siguiente
- En Java para comparar que dos objetos sean iguales (mismo objeto, misma instancia o referencia) se utiliza el símbolo == que no tiene nada que ver con el contenido.
- En cambio el método equals sirve para comparar que dos objetos sean iguales por lo general en contenido, no el mismo objeto
- Adicionalmente en una collection para que dos elementos sean iguales deben de tener el mismo hashCode
La opción b) esta incorrecta porque los objetos s1 y s2 a pesar de que tienen el mismo contenido, tienen el mismo hascode (el cual es obtenido en base al contenido) por lo que son iguales, lo que determina que en la collection del tipo Set solo podria estar uno de ellos. A continuación se expone la definición del método hashCode de la clase String donde se puede apreciar lo mencionado. [code] public int hashCode() { int h = hash; if (h == 0) { int off = offset; char val[] = value; int len = count; for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; } [/code]
La opción c) esta incorrecta porque las instancias del Objeto NameBean a pesar de que tienen el mismo contenido no tienen el mismo hashcode ya que son objetos diferentes, diferentes referencias.
La opción d) esta descartada porque en la collection myMap deberia existir al menos un elmento del tipo String y del tipo NameBean
Para terminar por la explicaciones anteriormente expuestas a las anteriores respuestas se concluye que la respuesta correcta es la a) ya que dos objetos son iguales siempre y cuando sean iguales en contenido y referencia (hasCode)
certificationjava / collections / java / martosfre / matoosfe / set
miércoles, 3 de febrero de 2016
Aniversario 16
febrero 03, 2016 martosfre
Princesita de mis sueños
Caramelito de mi corazón
Como no expresarte mi amor sincero
Si eres tu quien curo mis miedos
Si eres tu quien rompió el misterio
De aquel poeta loco y trovador
Que no creía en el amor.
Pinceladas de ternura que brotan en mi pecho
Y repiten a cada instante los recuerdos
Palabras simples que suenan armoniosas
Junto al TE AMO que siento latir
Cada vez que miro tu sonrisa llegar a mí.
El tiempo transcurre en silencio
Mientras mi amor florece con el tiempo
Amándote cada día como si fuese el primero
Y esperando que llegue aquel día anhelado
Para vivir una vida junta a tu lado.
amor / aniversario / majito / poesia / princesa
Error Cheese GStreamer
febrero 03, 2016 martosfre
Hola amig@s les comparto un error que se me presentó cuando desee utilizar el programa Cheese en mi Centos7 para realizar unas capturas con la webcam. A lo que lo inicialize obtuve el siguiente error
Para solucionar el problema se tiene que verificar que se tenga instalado los paquetes de gstreamer, luego si el problema persiste. Se debe dirigirse a la carpeta de usuario y eliminar el directorio ~/.cache/gstreamer-1.0 y volver a ejecutar Cheese con lo que la webcam se activará.
Saludos
Suscribirse a:
Entradas (Atom)