2016-06-24 8 views
6

Was wäre der legitime Gebrauch des folgenden Codes?Gibt es legitime Verwendung für Objektkonstruktor?

Object o =new Object(); 

Von dem, was ich diese Aufgabe verstehen keinen Gebrauch hat und trägt keine realen Daten (außer vielleicht für seinen Hash-Code). Warum sollte das verwendet werden? Ist es eine akzeptable Praxis? Wenn ich dazu in der Lage bin, könnte ich die Objektklasse explizit erweitern.

+7

ich gesehen habe es verwendet, um ein eindeutiges Sperrobjekt für Threads zu erstellen, obwohl es weit bessere Möglichkeiten zu tun Gleichzeitigkeit sind. –

+0

Idealerweise sollten Sie keine AtomicReference verwenden foo; –

+1

Warum konnten Sie 'Objekt' nicht explizit erweitern? Das ist der * implizite * Standard. –

Antwort

8

Von dem, was ich verstehe diese Aufgabe keine Verwendung hat und trägt keine realen Daten (außer vielleicht für seinen Hash-Code)

Das Objekt trägt seine Identität und seine monitor. Aus diesem Grund werden mit dieser Zuweisung Objektmonitore erstellt, die vom Objekt selbst getrennt sind.

Warum sollte dies verwendet werden? Ist es eine akzeptable Praxis?

Die einzige Verwendung, die ich gesehen habe, damit ein Objekt als Monitor für andere Objekte verwendet werden kann.

Wenn ich dazu in der Lage bin, könnte ich die Objektklasse explizit erweitern?

Absolut. Sie können ein Objekt in einer anonymen Klasse, wie folgt erweitern:

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

Sie können auch 'Object' in einer benannten Klasse (tatsächlich alle Klassen implizit) erweitern. – Thilo

+1

Vielen Dank für eine gut durchdachte Qualitätsantwort –

Verwandte Themen