Mam funkcję parsowania, która analizuje zakodowaną długość z bufora bajtów, zwraca sparsowaną długość jako int i bierze indeks do bufora jako arg liczby całkowitej. Chcę, aby funkcja aktualizowała indeks zgodnie z jego analizą, tj. Chcesz przekazać ten indeks przez odniesienie. W C po prostu przekazać int *
. Jaki jest najczystszy sposób na zrobienie tego w Javie? Obecnie patrzę na przekazanie indeksu arg. jako int[]
, ale jest nieco brzydki.Java: Najlepszy sposób przekazywania int przez odniesienie
Odpowiedz
Możesz spróbować użyć org.apache.commons.lang.mutable.MutableInt
z biblioteki Apache Commons. Nie ma bezpośredniego sposobu robienia tego w samym języku.
Nie można przekazywać argumentów przez odwołanie w Javie.
Co można zrobić, to zawrzeć wartość całkowitą w zmiennym obiekcie. Używanie Apache Commons 'MutableInt
jest dobrym rozwiązaniem. Innym, nieco bardziej zaciemnionym sposobem, jest użycie takiego, jak sugerowałeś. Nie użyłbym tego, ponieważ nie jest jasne, dlaczego owijasz w jedną komórkę tablicę.
Pamiętaj, że java.lang.Integer
jest niezmienny.
Nie jest to możliwe w Javie. Jak sugerujesz, jednym ze sposobów jest przekazanie int[]
. Innym byłoby mieć trochę klasy, np. IntHolder
, który opakował int
.
Owiń bufor bajtów i indeks do obiektu ByteBuffer. ByteBuffer zawiera koncepcję bufora + pozycji i pozwala na odczyt i zapis z indeksowanej pozycji, którą aktualizuje w miarę postępu.
Dokładnie. Nie zmuszaj Javy, aby robiła to po swojemu, zrób to w Javie. Java nie jest C. Próby sprawienia, aby działał jak C zawsze będą brzydkimi hackami. –
Można zaprojektować nową klasę tak:
public class Inte{
public int x=0;
}
później można utworzyć obiekt tej klasy:
Inte inte=new Inte();
potem można przekazać inte
jako argumentu w którym chcesz przekazać zmienną całkowitą :
public void function(Inte inte) {
some code
}
więc do aktualizacji wartość całkowita:
inte.x=value;
dla wartości uzyskiwanie:
Variable=inte.x;
Można użyć java.util.concurrent.atomic.AtomicInteger
.
Można utworzyć klasę Reference zawinąć prymitywów:
public class Ref<T>
{
public T Value;
public Ref(T value)
{
Value = value;
}
}
Następnie można tworzyć funkcje, które mają referencji jako parametrów:
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;
}
}
Zastosowanie:
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
Mam nadzieję że to pomoże.
- 1. Najlepszy sposób przekazywania obiektów między klasami w różnych wątkach?
- 2. Czy istnieje sposób przekazywania adnotacji Java jako parametru?
- 3. Najlepszy sposób przekazywania zmiennych z Symfony2 do zakresu Angular
- 4. Najlepszy sposób na analizowanie int w JavaScript
- 5. Najlepszy sposób konwersji INT do BIT
- 6. Przekazywanie tablicy przez odniesienie
- 7. przekazywanie wyliczeń przez odniesienie w java
- 8. Przekazywanie tablic przez odniesienie?
- 9. Przesyłanie argumentów tablicowych przez odniesienie
- 10. Przekaż tablicę nieznanej pozycji przez odniesienie
- 11. Kiedy należy wybrać elizę kopiowania w odniesieniu do przekazywania argumentu przez odniesienie do const?
- 12. Jak przekazać podciągi przez odniesienie?
- 13. Java dla pętli według wartości lub przez odniesienie
- 14. Czy istnieje sposób przekazywania dodatkowych danych przez zdarzenia niestandardowe?
- 15. Najlepszy sposób wywoływania gettera przez odbicie
- 16. Przekazywanie wektorów przez odniesienie
- 17. Najlepszy sposób na analizowanie Java w Javie
- 18. Konwertuj numer Java na BigDecimal: najlepszy sposób
- 19. Jawne przekazywanie list metodom działającym jak przekazywanie przez odniesienie
- 20. Jaki jest najlepszy sposób porównania Double i Int?
- 21. Najlepszy sposób obsługi KeyNotFoundException
- 22. Php przekazany przez wartość lub przez odniesienie
- 23. Jak przekazać hash przez odniesienie w perlu
- 24. Pass od wskaźnika & Przełęczy przez odniesienie
- 25. Najlepszy sposób poszukiwania HashSet
- 26. Jaki jest najlepszy sposób przekazywania wielu parametrów do metody wywołania zwrotnego Threading.Timer?
- 27. Recursion i przechodzącej przez odniesienie
- 28. python: jak wygenerować char przez dodanie int
- 29. Podanie wartości zwracanej przez funkcję jako odniesienie
- 30. Powrót Java Enum Int
'Integer' jest niezmienny. –
Jeśli chcesz uniknąć biblioteki apache, możesz przekazać int i zwrócić zaktualizowaną wartość. Jeśli są to dwie wartości, polecam używanie Point jako kontenera. W przeciwnym razie opcja tablicy lub jedna z pozostałych sugestii jest w porządku. – EntangledLoops
Powinieneś zwrócić int lub obiekt; Jeśli naprawdę potrzebujesz więcej niż jednego, być może powinieneś przemyśleć swój projekt "klas". –