POO-ITBA / 2024_02

Consultas 2C 2024
2 stars 0 forks source link

RepasoPrimerParcial ej2 (Dictionary) #14

Closed facundokrens65049 closed 2 months ago

facundokrens65049 commented 2 months ago

Hola! Buenas tardes! Quería preguntar cual sería la lógica de este método definido en la clase Dictionary

public Dictionary<E> addEntry(E key, String value) {
       if(dim == array.length) {
           resize();
       }
       array[dim++] = new DictionaryEntry<>(key, value);
       return this;
   }

Yo al método lo había definido de void, lo cual no compilaba debido al bloque del tester:


Dictionary<String> stringDict = new Dictionary<>();
        stringDict.addEntry("work", "something done or made")
                .addEntry("house", "a building for human habitation")
                .addEntry("house", "a style of popular dance music");
fmeola commented 2 months ago

Hola @facundokrens65049 El método addEntry tiene que retornar this porque en el programa de prueba se ve que, sobre lo que retorna el método de instancia addEntry, se invoca a otro método de instancia de Dictionary. Solo retornando this podés "encadenar" invocaciones de métodos de instancia de la misma clase.

[!NOTE] Esto es un patrón común que se usa para ahorrarse porciones de código de forma que te queda todo en una única proposición simple y se llama "return for chaining" o "method chaining".

facundokrens65049 commented 2 months ago

Y en este caso, this vendría a ser el "puntero" a stringDict, no? Si fuera this() se estaría invocando al constructor?

fmeola commented 2 months ago

Claro, siempre es la misma referencia a stringDict, esa que obtuviste cuando llamaste al constructor. La sintaxis this(...) es para que un constructor llame a otro pero es válida únicamente en un constructor. No podés invocar a this(...) dentro de addEntry.

facundokrens65049 commented 2 months ago

Genial, gracias!