Ho una funzione di analisi che analizza una lunghezza codificata da un buffer di byte, restituisce la lunghezza analizzata come un int e prende un indice nel buffer come argomento intero. Voglio che la funzione aggiorni l'indice in base a ciò che viene analizzato, ovvero desidera passare quell'indice per riferimento. In C vorrei solo passare un int *
. Qual è il modo più pulito per farlo in Java? Attualmente sto cercando di passare l'indice arg. come int[]
, ma è un po 'brutto.Java: il modo migliore per passare int per riferimento
risposta
Puoi provare a utilizzare org.apache.commons.lang.mutable.MutableInt
dalla libreria Apache Commons. Non esiste un modo diretto per farlo nel linguaggio stesso.
Non è possibile passare argomenti per riferimento in Java.
Quello che puoi fare è racchiudere il valore intero in un oggetto mutabile. L'utilizzo di Apache Commons 'MutableInt
è una buona opzione. Un altro modo, leggermente più offuscato, è usare uno int[]
come suggerito. Non lo userei in quanto non è chiaro il motivo per cui si sta confezionando uno int
in un array a cella singola.
Si noti che java.lang.Integer
è immutabile.
Questo non è possibile in Java. Come hai suggerito, un modo è passare un int[]
. Un altro sarebbe avere una piccola classe, ad es. IntHolder
che ha avvolto un int
.
Avvolgere il buffer di byte e l'indice in un oggetto ByteBuffer. Un ByteBuffer incapsula il concetto di una posizione buffer + e ti consente di leggere e scrivere dalla posizione indicizzata, che aggiorna man mano che procedi.
Esattamente. Non forzare Java a farlo a modo tuo, fallo in modo Java. Java non è C. I tentativi di farlo agire come C saranno sempre brutti hack. –
È possibile progettare la nuova classe come questa:
public class Inte{
public int x=0;
}
poi si può creare l'oggetto di questa classe:
Inte inte=new Inte();
allora si può passare inte
come argomento in cui si desidera passare una variabile intera :
public void function(Inte inte) {
some code
}
quindi per aggiornare il valore intero:
inte.x=value;
per il valore ottenere:
Variable=inte.x;
È possibile utilizzare java.util.concurrent.atomic.AtomicInteger
.
È possibile creare una classe di riferimento per avvolgere primitive:
public class Ref<T>
{
public T Value;
public Ref(T value)
{
Value = value;
}
}
Quindi è possibile creare funzioni che accettano un riferimento come parametri:
public class Utils
{
public static <T> void Swap(Ref<T> t1, Ref<T> t2)
{
T temp = t1.Value;
t1.Value = t2.Value;
t2.Value = temp;
}
}
Usage:
Ref<Integer> x = 2;
Ref<Integer> y = 9;
Utils.Swap(x, y);
System.out.println("x is now equal to " + x.Value + " and y is now equal to " + y.Value";
// Will print: x is now equal to 9 and y is now equal to 2
Spero che questo ti aiuti.
- 1. Oggetto Java to int: un modo migliore?
- 2. Qual è il modo migliore per confrontare Double e Int?
- 3. Il modo migliore per analizzare un valore int in Javascript
- 4. Il modo migliore per convertire INT in BIT
- 5. Qual è il modo migliore per passare alla codifica MVC?
- 6. Il modo migliore per passare da un frammento all'altro
- 7. Java: il modo migliore per stampare array 2D?
- 8. Il modo migliore per analizzare Java in Java
- 9. Il modo migliore per riorganizzare un ArrayList in Java
- 10. Migliore riferimento al file per il typescript
- 11. Il modo migliore per simulare il servizio web java
- 12. Java vs C++ passare riferimento
- 13. Passando per riferimento in Java?
- 14. Un modo migliore per trasmettere l'oggetto a int
- 15. Il modo migliore per creare array singleton
- 16. Il modo migliore per gestire più costruttori in Java
- 17. Il modo migliore per eseguire AppleScript da Java
- 18. Il modo migliore per incrementare l'intero in arrayList in Java
- 19. Il modo migliore per chiamare le funzioni Haskell da Java
- 20. Java: il modo migliore per rimuovere Javascript dall'HTML
- 21. Il modo migliore per salvare i dati in un'applicazione Java?
- 22. Il modo migliore per stampare report semplici in java
- 23. Il modo migliore per creare un collage (in Java)
- 24. Qual è il modo migliore per eseguire codice Java sandboxed?
- 25. Il modo migliore per sommare simultaneamente
- 26. Il modo migliore per "negare" un'istanza di
- 27. Il modo migliore per scrivere immagini?
- 28. Il modo migliore per ottenere le singole cifre da int per l'ordinamento digitale in C/C++
- 29. Passare un array per riferimento in C?
- 30. Il modo migliore per gestire un KeyNotFoundException
"Integer" è immutabile. –
Se si desidera evitare la libreria apache, è possibile passare int e restituire il valore aggiornato. Se si tratta di due valori, ti consiglio di utilizzare Point come contenitore. Altrimenti, l'opzione dell'array o uno degli altri suggerimenti qui va bene. – EntangledLoops
Si dovrebbe restituire un int o un oggetto; Se hai davvero bisogno di più di una, forse dovresti riconsiderare il tuo design delle 'classi' –