Spero di aver scelto il gruppo giusto per questa domanda ...
Ho questo piccolo quadro che voglio implementare e vorrei avere un'opinione in merito. In particolare, sono più preoccupato per la concisione e lo stile della soluzione. Il mio schizzo di classe ha questo aspetto:
public interface Builder<T> {
T build();
}
public interface RootObject {
public static abstract class MutableBuilder<T> implements Builder<T> {
protected MutableBuilder() { }
protected abstract void setA(A a);
protected abstract void setB(B b);
protected abstract void setC(C c);
protected abstract void setD(D d);
}
}
L'obiettivo è avere un Builder che restituisca un'istanza di oggetti (si spera) immutabili. L'intera implementazione è lasciata al codice client, ma voglio comunque dare l'imprinting dell'interfaccia fluente di Java efficace.
Se fosse solo per questo, non sarei perplesso. Il problema si verifica quando aggiungo i requisiti:
- il framework deve riflettere in modo riflessivo attraverso un'implementazione generica
RootObject
per trovare se la classe interna staticaMutableBuilder
è stata implementata. - se trovato, il framework istanzia uno o più
MutableBuilder
dinamicamente (questo è il motivo per cui ho una classe astratta con un costruttore e la restituisco al codice client.
Il semplice parlare di riflessione mi fa chiedere se sto facendo la cosa giusta. Sembra una soluzione ragionevole per me (ovviamente).