es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo utilizar genéricos en Java al tratar con múltiples objetos heterogéneos?

Digamos que tengo dos clases que se ven así:

public class classA {
    private Boolean is_started;

    public classA(Boolean is_started) {
        this.is_started = is_started;
    }
    public Boolean getIs_started(){
        return this.is_started;
    }
}

public class classB {
    private String token;

    public classA(String token) {
        this.token = token;
    }
    public String get_token(){
        return this.token;
    }
}

Estoy llamando a esas dos clases desde otra clase como así:

public class CallingClass {

    public void function1() {
        ClassA stepA = new ClassA(<algún booleano="">);
        commonFunction(stepA);
}
    public void function2() {
        ClassB stepB = new ClassB(<algún string="">);
        commonFunction(stepB);
}
    public <t> void commonFunction(Class<t> dataObject) {
        //Una declaración if que tiene una condición que solo llama una función en classB {
            String token = dataObject.get_token();
        }
        //Una declaración if que tiene una condición que solo llama una función en classA {
        Boolean is_started = dataObject.getIS_started();
        }
//Hay un error que dice: El método [get_token()/getIS_started()] no está definido para el tipo Class<t>

Quiero asegurarme de que puedo llamar a diferentes objetos sin especificarlos en la función. Por ejemplo, quiero suministrar ClassA y ClassB como argumento a commonFunction como en el ejemplo anterior. ¿Cómo puedo hacerlo con genéricos?</algún></algún>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograrlo con genéricos, debes definir la función común de la siguiente manera:

    public <t> void commonFunction(T dataObject) {
        if (dataObject instanceof ClassB) {
            String token = ((ClassB) dataObject).get_token();
            // hacer algo con token
        } else if (dataObject instanceof ClassA) {
            Boolean is_started = ((ClassA) dataObject).getIs_started();
            // hacer algo con is_started
        }
    }
    

    Con este cambio, ahora puedes llamar a la commonFunction con cualquier objeto de tipo ClassA o ClassB, sin tener que especificarlos en la función. El operador instanceof se utiliza para determinar el tipo de objeto en tiempo de ejecución, y luego se llama al método correspondiente según el tipo.

Comments are closed.