Ich habe eine Analysefunktion, die eine codierte Länge aus einem Bytepuffer analysiert, die analysierte Länge als int zurückgibt und einen Index als ganzzahliges Argument in den Puffer aufnimmt. Ich möchte, dass die Funktion den Index entsprechend der Analyse aktualisiert, dh diesen Index als Referenz übergeben möchte. In C würde ich einfach eine passieren int *
. Was ist der sauberste Weg, dies in Java zu tun? Ich bin gerade dabei, das Indexargument zu übergeben. als int[]
, aber es ist ein bisschen hässlich.
java
pass-by-reference
Fred Basset
quelle
quelle
Integer
ist unveränderlich.Antworten:
Sie können versuchen,
org.apache.commons.lang.mutable.MutableInt
aus der Apache Commons-Bibliothek zu verwenden. Es gibt keinen direkten Weg, dies in der Sprache selbst zu tun.quelle
Dies ist in Java nicht möglich. Wie Sie vorgeschlagen haben, besteht eine Möglichkeit darin, eine zu bestehen
int[]
. Eine andere Möglichkeit wäre, ein wenig Klasse zB do haben ,IntHolder
dass ein eingewickeltint
.quelle
Sie können in Java keine Argumente als Referenz übergeben.
Sie können Ihren ganzzahligen Wert in ein veränderbares Objekt einschließen. Die Verwendung von Apache Commons
MutableInt
ist eine gute Option. Eine andere, etwas verschleiertere Methode ist die Verwendung einer vonint[]
Ihnen vorgeschlagenen Methode . Ich würde es nicht verwenden, da unklar ist, warum Sie einint
Array in ein einzelliges Array einwickeln .Beachten Sie, dass dies
java.lang.Integer
unveränderlich ist.quelle
Sie können verwenden
java.util.concurrent.atomic.AtomicInteger
.quelle
Wickeln Sie den Bytepuffer und den Index in ein ByteBuffer- Objekt. Ein ByteBuffer kapselt das Konzept einer Puffer + Position und ermöglicht Ihnen das Lesen und Schreiben von der indizierten Position, die er im Laufe der Zeit aktualisiert.
quelle
Sie können eine neue Klasse wie folgt entwerfen:
später können Sie ein Objekt dieser Klasse erstellen:
Dann können Sie
inte
als Argument übergeben, wo Sie eine Ganzzahlvariable übergeben möchten:Also für die Aktualisierung des Integer-Werts:
um Wert zu bekommen:
quelle
Sie können eine Referenzklasse erstellen, um Grundelemente zu verpacken:
Anschließend können Sie Funktionen erstellen, die eine Referenz als Parameter verwenden:
Verwendung:
Hoffe das hilft.
quelle