elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)  (Leído 6,033 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)
« en: 30 Marzo 2019, 01:57 am »

Buenas mi duda era si habia alguna forma de mostrar todos los atributos de un objeto, porque la verdad me canse de escribir mucho sout y llamar a los metodos Getters, alguna técnica porfis   :-(


« Última modificación: 30 Marzo 2019, 07:03 am por Beginner Web » En línea

7w7
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Metodo mostrar todos los atributos de un objeto por pantalla
« Respuesta #1 en: 30 Marzo 2019, 02:07 am »

Buenas mi duda era si habia alguna forma de mostrar todos los atributos de un objeto, porque la verdad me canse de escribir mucho sout y llamar a los metodos Getters, alguna técnica porfis   :-(

Puedes sobreescribir el metodo toString() ,pero como tienes el código?


En línea

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 king
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Metodo mostrar todos los atributos de un objeto por pantalla
« Respuesta #2 en: 30 Marzo 2019, 02:31 am »

//Este es una clase
public class Persona{
private String nombre;
private int edad;

Constructor va aquí
Getters & Setters aquí
}

//Este es el main
public class Personal{

public static void main(){
Persona objeto1=new Persona("Ana",14);

//Esto es algo tedioso de hacer varios objetos de distintas clases
//Podia crear un metodo en la clase Persona que muestre todo, pero quiero saber si hay otra técnica por defecto
sout para mostrar el nombre de objeto1;
sout para mostrar la edad de objeto1;

}

}


Me parece que me conviene crear metodos en las clases para pedir los datos y otro para mostrarlos asi escribo menos en el main
« Última modificación: 30 Marzo 2019, 02:51 am por Beginner Web » En línea

7w7
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)
« Respuesta #3 en: 30 Marzo 2019, 14:50 pm »

//Este es una clase
public class Persona{
private String nombre;
private int edad;

Constructor va aquí
Getters & Setters aquí
}

//Este es el main
public class Personal{

public static void main(){
Persona objeto1=new Persona("Ana",14);

//Esto es algo tedioso de hacer varios objetos de distintas clases
//Podia crear un metodo en la clase Persona que muestre todo, pero quiero saber si hay otra técnica por defecto
sout para mostrar el nombre de objeto1;
sout para mostrar la edad de objeto1;

}

}


Me parece que me conviene crear metodos en las clases para pedir los datos y otro para mostrarlos asi escribo menos en el main


Que tal chavalina? Usa Geshi



Si hay mejores maneras de hacerlo por ejemplo una, lo que necesitas es algo de herencia simple

Código
  1. import java.util.logging.Logger;
  2.  
  3. /**
  4.  *
  5.  */
  6. @FunctionalInterface
  7. public interface IPersonal {
  8.  
  9.    Logger LOGGER =Logger.getLogger(IPersonal.class.getSimpleName());
  10.  
  11.    void introducirDatos();
  12.  
  13.    default <T> void mostrar(final T value) {
  14.        System.out.println(value);
  15.    }
  16.  
  17.    /**
  18.      * usar dentro de un metodo estatico
  19.      * @param value
  20.      * @param <T>
  21.      */
  22.    static <T> void mostrar2(final T value) {
  23.        System.out.println(value);
  24.    }
  25.  
  26.    default <T> void log(final T t) {
  27.        LOGGER.severe(t.toString());
  28.    }
  29.  
  30.    /**
  31.      * usar dentro de un metodo estatico
  32.      * @param t
  33.      * @param <T>
  34.      */
  35.    static <T> void log2(final T t) {
  36.        LOGGER.severe(t.toString());
  37.    }
  38. }
  39.  

Código
  1. import java.util.Objects;
  2. import java.util.Scanner;
  3.  
  4. /**
  5.  *
  6.  */
  7. public abstract class AbstractBasePersona implements IPersonal {
  8.  
  9.    protected String nombre;
  10.    protected int edad;
  11.    protected static final Scanner LEER = new Scanner(System.in);
  12.  
  13.    public AbstractBasePersona() {
  14.        this.edad = 0;
  15.        this.nombre = "";
  16.    }
  17.  
  18.    public AbstractBasePersona(final String nombre, final int edad) {
  19.        this.nombre = Objects.requireNonNull(nombre,"Nombre no debe ser null");
  20.        this.edad = Objects.requireNonNull(edad,"Edad no debe ser null");
  21.    }
  22.  
  23.    public String getNombre() {
  24.        return nombre;
  25.    }
  26.  
  27.    public void setNombre(String nombre) {
  28.        this.nombre = nombre;
  29.    }
  30.  
  31.    public int getEdad() {
  32.        return edad;
  33.    }
  34.  
  35.    public void setEdad(int edad) {
  36.        this.edad = edad;
  37.    }
  38.  
  39.    @Override
  40.    public void introducirDatos() {
  41.        mostrar("Introduce nombre: ");
  42.        nombre = LEER.next();
  43.        //bug scanner
  44.        LEER.nextLine();
  45.        mostrar("Introduce edad");
  46.  
  47.        while(!LEER.hasNextInt()) {
  48.            LEER.next();
  49.            mostrar("Valor invalido!, solo numeros");
  50.        }
  51.        edad = LEER.nextInt();
  52.  
  53.    }
  54.  
  55.    @Override
  56.    public String toString() {
  57.        final StringBuilder sb = new StringBuilder("\nPersona");
  58.        sb.append("\nNombre: ").append(nombre).append("\n");
  59.        sb.append("Edad: ").append(edad);
  60.        return sb.toString();
  61.    }
  62.  
  63.  
  64. }
  65.  
  66.  

Código
  1. public class PersonalDeInformatica extends AbstractBasePersona {
  2.  
  3.    private boolean esDeInformatica;
  4.  
  5.    public PersonalDeInformatica() {
  6.        super();
  7.    }
  8.  
  9.    public PersonalDeInformatica(final String nombre,final int edad, boolean esDeInformatica) {
  10.        super(nombre,edad);
  11.        this.esDeInformatica = esDeInformatica;
  12.    }
  13.  
  14.    @Override
  15.    public void introducirDatos() {
  16.        /**
  17.          * Introducir los datos basicos por defecto, Nombre y Edad
  18.          */
  19.        super.introducirDatos();
  20.  
  21.        // pedimo si es personal de informatica
  22.  
  23.        mostrar("Personal del Informtica ?");
  24.        esDeInformatica = LEER.nextBoolean();
  25.  
  26.        //setemos el tipo de persona
  27.        setEsDeInformatica(esDeInformatica);
  28.    }
  29.  
  30.    public boolean isEsDeInformatica() {
  31.        return esDeInformatica;
  32.    }
  33.  
  34.    public void setEsDeInformatica(boolean esDeInformatica) {
  35.        this.esDeInformatica = esDeInformatica;
  36.    }
  37.  
  38.    @Override
  39.    public String toString() {
  40.        final StringBuilder sb = new StringBuilder();
  41.        sb.append(super.toString());
  42.        sb.append("\nEs de informatica ? ").append(esDeInformatica);
  43.        return sb.toString();
  44.    }
  45. }
  46.  
  47.  

Código
  1. /**
  2.  *
  3.  */
  4. public class PersonalDeLimpieza extends AbstractBasePersona {
  5.  
  6.    private boolean esDeLimpieza; //por defecto la variable de instancia boolean, es false
  7.  
  8.    public PersonalDeLimpieza() {
  9.        super();
  10.    }
  11.  
  12.    public PersonalDeLimpieza(final String nombre, final int edad, final boolean esDeLimpieza) {
  13.        super(nombre,edad);
  14.        this.esDeLimpieza = esDeLimpieza;
  15.    }
  16.  
  17.    public boolean isEsDeLimpieza() {
  18.        return esDeLimpieza;
  19.    }
  20.  
  21.    public void setEsDeLimpieza(boolean esDeLimpieza) {
  22.        this.esDeLimpieza = esDeLimpieza;
  23.    }
  24.  
  25.    @Override
  26.    public void introducirDatos() {
  27.        //invocamo al introducir datos de la superClaseAbstracta
  28.        super.introducirDatos();
  29.  
  30.        // pedimo si es personal de limpieza
  31.  
  32.        mostrar("Personal del limpieza ?");
  33.        esDeLimpieza = LEER.nextBoolean();
  34.  
  35.        //setemos el tipo de persona
  36.        setEsDeLimpieza(esDeLimpieza);
  37.  
  38.    }
  39.  
  40.    @Override
  41.    public String toString() {
  42.        final StringBuilder sb = new StringBuilder();
  43.        sb.append(super.toString());
  44.        sb.append("\nPersonal de Limpieza ? ").append(isEsDeLimpieza()).append("\n");
  45.        return sb.toString();
  46.    }
  47.  
  48. }
  49.  
  50.  


Código
  1. import java.util.LinkedList;
  2.  
  3. /**
  4.  *
  5.  */
  6. public class Principal {
  7.  
  8.    private final LinkedList<IPersonal> iPersonalLinkedList = new LinkedList<>();
  9.  
  10.  
  11.    public Principal() {
  12.        init();
  13.    }
  14.  
  15.    private void init() {
  16.  
  17.        final PersonalDeLimpieza personalDeLimpieza = new PersonalDeLimpieza();
  18.        personalDeLimpieza.introducirDatos();
  19.  
  20.        final PersonalDeInformatica personalDeInformatica = new PersonalDeInformatica();
  21.        personalDeInformatica.introducirDatos();
  22.  
  23.        /**
  24.          * Anadimos a todos los objetos que extienden/implementan a IPersonal
  25.          * para procesarlos de manera polimorfica gracias, a que cada uno,
  26.          * sobreEscribe a toString().
  27.          */
  28.        iPersonalLinkedList.add(personalDeLimpieza);
  29.        iPersonalLinkedList.add(personalDeInformatica);
  30.  
  31.        /**
  32.          * Se invocara al metodo toString() de cada Objeto, implicitanmente
  33.          */
  34.        //java 8
  35.        iPersonalLinkedList.forEach(e -> e.mostrar(e));
  36.  
  37.        //java 7
  38.        /*for(IPersonal tmp : iPersonalLinkedList) {
  39.             tmp.mostrar(tmp.toString());
  40.         }*/
  41.  
  42.    }
  43.  
  44.    public static void main(String ...blabla) {
  45.        new Principal();
  46.    }
  47. }
  48.  

Salida

Código
  1. Introduce nombre:
  2. Ana
  3. Introduce edad
  4. 14
  5. Personal del limpieza ?
  6. false
  7. Introduce nombre:
  8. rubn
  9. Introduce edad
  10. 30
  11. Personal del Informtica ?
  12. true
  13.  
  14. Persona
  15. Nombre: Ana
  16. Edad: 14
  17. Personal de Limpieza ? false
  18.  
  19.  
  20. Persona
  21. Nombre: rubn
  22. Edad: 30
  23. Es de informatica ? true
  24.  
  25. Process finished with exit code 0
  26.  

Un ejemplo sencillo, luego chekeate el patrón Builder  >:D , y Abstract Generic Builder , con interfaces también (te aseguro que te gustara, y trabajaras mejor con inmutabilidad)
« Última modificación: 30 Marzo 2019, 19:44 pm por rub'n » En línea

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 king
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)
« Respuesta #4 en: 30 Marzo 2019, 15:55 pm »

No deberias gastar tiempo en escribir los getters / setters o el metodo toString(). Los editores deberian hacerlo por ti. IntelliJ lo hace, al menos.

Otra alternativa es ni siquiera escribir el codigo, sino anotar la clase y que magicamente esos metodos se escriban y existan aunque no los veas. AutoValue y Lombok son 2 exponentes de esto.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)
« Respuesta #5 en: 30 Marzo 2019, 18:37 pm »

No deberias gastar tiempo en escribir los getters / setters o el metodo toString(). Los editores deberian hacerlo por ti. IntelliJ lo hace, al menos.

Otra alternativa es ni siquiera escribir el codigo, sino anotar la clase y que magicamente esos metodos se escriban y existan aunque no los veas. AutoValue y Lombok son 2 exponentes de esto.

Magicamente? o gracias a Reflection vía anotaciones? generando codigo en runtime, la chavala esta aprendiendo, por eso mi ejemplo.

Aunque me falto decirle eso. yo genere getters/setters/toString() con intelliJIDea, eclipse también lo hace, netBeans me imagino que también debería.

@CalgaryCorpus seria bueno que le pusieras un ejemplo de Project Lombok para que la ayudes.

Y de paso ah dia de hoy grandes Frameworks webs de java, potentes, tienen su implementacion de toString() sin api de terceros como lombok entre otras, de paso que toString() sirve para no mostrar el codigo hash directamente a alguien que espie dichos objetos.
 


@Beginner Web , creas las variables de instancia que quieras, luego, teclas Alt + insertar, debería aparecerte este cuadro de contexto con las opciones que se muestran, no aparece toString() porque ya lo use, versión de NetBeans que tengo

    * Product Version: NetBeans IDE 8.2 (Build 201610071157)



« Última modificación: 30 Marzo 2019, 19:34 pm por rub'n » En línea

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 king
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Metodo mostrar todos los atributos de un objeto por pantalla(RESUELTO)
« Respuesta #6 en: 4 Abril 2019, 10:35 am »

interesante pero algo complicado por ahora
En línea

7w7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines