2016-06-24 11 views
6

Quale sarebbe l'uso legittimo del seguente codice?Esiste un uso legittimo per il costruttore di oggetti?

Object o =new Object(); 

Da quello che ho capito questo oggetto ha alcuna utilità e non comporta alcun dato reale (eccetto forse per il suo codice hash). Perché dovrebbe essere usato? È una pratica accettabile Se riesco a farlo, potrei estendere esplicitamente la classe dell'oggetto.

+7

ho visto utilizzato per creare un oggetto di blocco univoca per le discussioni, anche se ci sono modi molto migliori per fare concorrenza. –

+0

Idealmente non dovresti usare un AtomicReference foo; –

+1

Perché non potresti estendere esplicitamente 'Object'? Questo è il * implicito * predefinito. –

risposta

8

Da quello che ho capito questo oggetto ha alcuna utilità e non comporta alcun dato reale (eccetto forse per il suo codice hash)

L'oggetto porta la sua identità e la sua monitor. Questo è il motivo per cui questo incarico è usato per creare monitor di oggetti che sono separati dall'oggetto stesso.

Perché dovrebbe essere utilizzato? È una pratica accettabile?

L'unico utilizzo che ho visto per fare un oggetto da utilizzare come monitor per altri oggetti.

Se riesco a farlo, potrei estendere esplicitamente la classe dell'oggetto?

Assolutamente. È possibile estendere un oggetto in una classe anonima, come questo:

Object obj = new Object() { 
    @Override 
    public String toString() { 
     return "Hello, world!"; 
    } 
}; 
+3

Puoi anche estendere 'Object' in una classe denominata (infatti, tutte le classi implicitamente lo fanno). – Thilo

+1

Grazie per una risposta di qualità ben strutturata –

Problemi correlati