Eclipse meldet die clone () -Methode eines Arrays von seinem entsprechenden Typ (einschließlich Primitiven)?

8

Ich war unter der Annahme, dass wenn Eklipse Methoden vorschlägt, es in der Form

ist %Vor%

Und es scheint für alle Methoden (aber clone ()) auch im geposteten Bild zu stimmen.

Aber für clone() sagt Eclipse, dass die Methode vom Typ des Arrays kommt ( byte in diesem Fall).

Dies gilt auch für alle Arrays primitiver Typen und Arrays von Referenztypen .

ZB: Für String[] gibt es clone() : String[] - String

Was heißt das? Ist mein Verständnis falsch? Oder gibt es noch etwas in der clone() -Methode?

Nur um das klarzustellen, ist meine Frage Warum sagt Eclipse "clone ()" aus Byte, wenn es von Byte [] sein sollte, genauso wie "Länge" .

    
Codebender 17.07.2015, 06:18
quelle

2 Antworten

3

Dies kann nur beantwortet werden, indem man sich den Eclipse-Quellcode anschaut.

Die Antwort auf Ihre Frage ist einfach und enttäuschend: Der Eclipse-UI-Code, der die vollständigen Vorschläge erzeugt, baut eine fehlerhafte Anzeige auf. Beachten Sie, dass der vollständige Vorschlag für die length -Eigenschaft eines Arrays den richtigen Typ (Byte [] in Ihrem Beispiel) zeigt.

Die Details:

Wenn Sie den Abschlussassistenten auslösen, werden die möglichen Komplettierungen als Abschlussarbeiten .

Die Eigenschaft der CompletionProposals, die verwendet wird, um den Typ einer vorgeschlagenen Methode oder Feldvervollständigung anzuzeigen, ist die declaringTypeSignature (siehe unten).

CompletionTests zeigt, dass die Proposal-Objekte für die Klon-Methode und das Längenfeld eines Byte-Arrays eine declaringTypeSignature" [B ".

haben

Nun CompletionProposalLabelProvider nimmt diese Angebotsobjekte und erstellt die Ansicht in Form eines StyledString . Die Methode #createLabelWithTypeAndDeclaration erledigt dies für Feldvorschläge, die Methode #createMethodProposalLabel für Methodenvorschläge. Sie haben verschiedene Implementierungen für die Anzeige des Deklarationstyps.

Die Methodenanzeige ruft SignatureUtil.stripSignatureToFQN , übergeben" [B "als Signatur. Das zurückgegebene Ergebnis hat alle Array-Informationen entfernt und ist einfach "Byte".

Die Feldanzeige ruft Signature.getSignatureSimpleName übergibt" [B]. Diese Methode ignoriert die Array-Informationen nicht und gibt "byte []" zurück.

    
wero 20.07.2015, 10:45
quelle
-1

Dies liegt daran, dass das Klonen vom Typ des Objekts abhängt. Dies hängt von der Speichergröße der Objekte oder primitiven Datentypen ab.

clone () -Methode ist eigentlich die Methode der Superklasse 'Object'. Andere Klassen sollen dies überschreiben und ihre eigene Implementierung für sicheres Klonen implementieren. Wenn nichts bereitgestellt wird, wird das normale Klonen der Objektklasse aufgerufen und implementiert.

Aus diesem Grund hängt das Klonen eines Arrays vom Typ der Daten ab, die das Array enthält, und die Klonmethode dieses Datentyps wird aufgerufen. Wenn Sie einen int [] haben, wird Klon für int aufgerufen. Wenn Sie Klasse A haben und 'a' das Objekt der Klasse A ist und Sie ein Array von 'a' Objekten (a []) haben, wird ein Klon von Klasse A aufgerufen.

Ich hoffe, das beantwortet Ihre Frage.

    
Nalin Agrawal 17.07.2015 06:45
quelle

Tags und Links