C'è un consenso generale che un costruttore non dovrebbe mai lanciare un'eccezione in Java. Può causare problemi con il tentativo di recupero da new
. Puoi, ma è uno di quelli "cerca di evitarlo se può essere fatto in modo sensato".
In questo senso, il Generatore statico (che chiami get(...)
) è probabilmente un approccio migliore da seguire. Ciò ti consente di costruire e disporre / chiudere correttamente le risorse per invocare http e gestire le eccezioni (cosa succede se questa richiesta fallisce? O quella successiva?)
Con un approccio Builder, dovresti considerare di rendere privato il costruttore in modo da poter garantire che lo stato di Foo
sia costruito correttamente dal metodo get(...)
, se è stato creato affatto.
Per threading e velocità? Non c'è davvero alcuna differenza. È interamente un problema fare in modo che le eccezioni vengano gettate in una circostanza non sorprendente e qualsiasi risorsa (le richieste web) viene chiusa correttamente nel caso in cui qualcosa vada storto.