Ho una Collections.synchronizedList di WeakReference, _components;In java, il valore restituito all'interno del blocco sincronizzato sembra un cattivo stile. Importa davvero?
ho scritto qualcosa di simile a quanto segue, aspettandosi il compilatore a lamentarsi:
public boolean addComponent2(Component e) {
synchronized (_components) {
return _components.add(new WeakReference<Component>(e));
}
}
Ma il compilatore è perfettamente soddisfatto. Notare che List.add() restituisce VERO. Quindi ok, qualsiasi uscita da un blocco sincronizzato rilascia il blocco, ma questo non sembra strano? È un po 'come un "buco" nel blocco, simile all'utilizzo del ritorno in loop.
Sarebbe felice mantenere il codice come questo?
Mentre io di solito ritorno da dentro il blocco di troppo (in realtà, non mi trovo con blocchi di sincronizzazione primitive più molto comunque , ma ancora) ci possono essere alcuni vantaggi nel fare questo fin dall'inizio. Se si dispone solo del blocco di sincronizzazione e in seguito è necessario aggiungere un codice aggiuntivo, ma il codice non richiede la sincronizzazione, quindi è già stato risolto. Se non è stato risolto, gli sviluppatori futuri potrebbero aggiungere il codice aggiuntivo all'interno del blocco di sincronizzazione poiché è più semplice, il che potrebbe legare il monitor inutilmente. Quindi vorrei ancora restituire la forma all'interno, ma c'è un piccolo vantaggio per il futuro. – corsiKa
@ corsiKa: C'è solo un vantaggio per il futuro * se * tale modifica è richiesta. Se non è richiesto, rende * leggendo * il codice un po 'più difficile per tutto il tempo, IMO. –