Constructores
El código que se ejecuta solo al hacer new: deja cada instancia lista para usar, como los valores por defecto de un campo al pulsar New.
✓ En esta sub-lección
- 01Escribir un constructor con parámetros y reconocer que no lleva tipo de retorno.
- 02Dejar cada instancia en un estado válido desde el principio, sin listas a null.
- 03Saber cuándo deja de existir el constructor vacío que Apex pone por ti.
La nutria: ¿Te acuerdas? · Repaso de la lección 2
Haces Opportunity b = a; y luego b.StageName = 'Closed Lost';. ¿Qué pasa con a.StageName?
En la lección anterior fabricabas un WorkTicket vacío y después rellenabas sus campos uno a uno. Si olvidabas uno, quedaba en null y un método podía fallar más tarde. Un constructor resuelve eso: es el código que se ejecuta automáticamente al hacer new, y su trabajo es entregar una instancia lista para usar.
La nutria: El paralelo de Admin
Anatomía de un constructor
public class SupportPlan {
public String level;
public Integer hoursIncluded;
public Date startDate;
public List<String> contacts;
// Constructor: mismo nombre que la clase, sin tipo de retorno
public SupportPlan(String planLevel) {
level = planLevel;
startDate = Date.today();
contacts = new List<String>(); // nunca null
hoursIncluded = planLevel == 'Gold' ? 40 : 10;
}
}
SupportPlan plan = new SupportPlan('Gold'); // el constructor se ejecuta aquí
plan.contacts.add('ana@acme.com'); // funciona: la lista ya existe- Se llama exactamente igual que la clase, con la misma mayúscula.
- No lleva tipo de retorno, ni siquiera void. Si le pones void, deja de ser un constructor y pasa a ser un método normal que nadie llama.
- Lo que va entre los paréntesis de new SupportPlan('Gold') son los argumentos que recibe.
new SupportPlan('Gold')EL OBJETO EN MEMORIA
- levelnull
- startDatenull
- contactsnull
- hoursIncludednull
Paso 1 de 6
new reserva un objeto vacío: todos sus atributos empiezan en null.
Un objeto válido desde el primer segundo
Recuerda del Módulo 1 que todo empieza en , también las listas. Un atributo List<String> contacts; sin inicializar es null, y contacts.add(…) lanzaría una . El constructor es el sitio natural para crear las colecciones vacías y poner los valores por defecto, de modo que nadie que use la clase tenga que acordarse.
El constructor que Apex pone por ti… hasta que escribes uno
Si una clase no tiene ningún constructor, Apex le da uno vacío, sin parámetros: por eso new WorkTicket() funcionaba. En cuanto escribes un constructor con parámetros, ese vacío desaparece. Si también quieres permitir new SupportPlan(), tienes que escribirlo tú. Una clase puede tener varios constructores mientras sus parámetros sean distintos.
SupportPlan basic = new SupportPlan(); // ❌ no compila: ya no existe el constructor vacío
// Para permitirlo, se escribe explícitamente:
public SupportPlan() {
level = 'Basic';
startDate = Date.today();
contacts = new List<String>();
hoursIncluded = 5;
}Varios constructores, varias formas de nacer
Una clase puede tener más de un constructor, siempre que cada uno reciba parámetros distintos. Así ofreces varias formas de crear el objeto: la habitual, con los datos mínimos, y otra más completa para los casos especiales. Apex elige cuál ejecutar mirando lo que pasas al hacer new. Es tu primer contacto con la sobrecarga, que la lección 9 explica a fondo.
public SupportPlan(String planLevel) {
// … el de siempre: las horas salen del nivel
}
public SupportPlan(String planLevel, Integer customHours) {
// … para un contrato negociado: horas a medida
}
SupportPlan standard = new SupportPlan('Silver');
SupportPlan negotiated = new SupportPlan('Gold', 60);La nutria: Como las acciones rápidas con valores predefinidos