• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metody funkcji. Przekazywanie argumentu przez referencje.

Aruba Cloud - Virtual Private Server VPS
0 głosów
783 wizyt
pytanie zadane 29 grudnia 2018 w Java przez studenciak Nowicjusz (230 p.)
Dzień dobry.
Napisałem funkcję void, do której przekazuję 2 argumenty typu prostego int. Zależy mi na tym aby te dwa przekazywane argumenty były modyfikowane również poza funkcją, tzn. aby funkcja nie operowała na kopiach tych argumentów, ale pracowała na tych samych obszarach pamięci (pracowała na oryginałach). W c++ korzystało się z operatora &, jeśli chcieliśmy modyfikować przekazywane parametry. Czy w javie istnieje również coś takiego? Wiem, że w przypadku parametrów, będących obiektami pracujemy na referencji, natomiast w przypadku typów prostych - na wartości. Czy jest możliwość pracować na pamięci w przypadku typów prostych? Czy trzeba tworzyć osobne obiekty wykorzystujące typy proste i to te obiekty przesyłać do metod?

2 odpowiedzi

0 głosów
odpowiedź 29 grudnia 2018 przez RafalS VIP (122,820 p.)
Da się, ale powinno się unikać.

Możesz użyć jakichś mutowalnych wraperow np:

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html

Albo guava mutableint.

Albo po prostu opakowac w tablice jednoelementowa.

Wszystkie wersje dają funkcjonalność ale są dziwne i nieczytelne. I dobrze :p
komentarz 29 grudnia 2018 przez studenciak Nowicjusz (230 p.)

Dzięki za pomoc. Na stackoverflow znalazłem podobny problem, gdyby ktoś kiedyś jeszcze szukał to: https://stackoverflow.com/questions/3662288/can-i-pass-a-primitive-type-by-reference-in-java

0 głosów
odpowiedź 29 grudnia 2018 przez mbabane Szeryf (79,260 p.)

A co ta funkcja w sumie robi, bo wydaje mi się, że może to ona jest źle przemyślana. Może zamiast robić funkcję z dwoma parametrami zrób do tej funkcjonalności klasę:

public class SomeClass
{
      private int value1;
      private int value2;

     public SomeClass(int value1, int value2)
      {
            this.value1 = value1;
            this.value2 = value2;
       }

     public void process()
     {
        this.value1 = value1 + 10;
        this.value2 = value2 + 20;
     }

      public int getValue1()
     {
          return value1;
     }

      public int getValue2()
     {
          return value2;
     }

}

Zastosowanie:

int val1 = 10;
int val2 = 15;

SomeClass someClass = new SomeClass(val1, val2);
someClass.process();

System.out.println("val1: " + someClass.getValue1());
System.out.println("val2: " + someClass.getValue2());

Ewentualnie jeszcze jakieś bardziej wyszukane i przemyślane refaktoryzacje. Powyższe to jakiś pierwszy etap - wydzielenie klasy.

komentarz 29 grudnia 2018 przez studenciak Nowicjusz (230 p.)
Rozwiązywałem zadanie ze spoja i miałem w rozwiązaniu 2 zmienne typu int: godziny, minuty. Do metod chciałem przekazywać te dwie zmienne typu prostego a z racji, iż jest to zadanie ze spoja, nie chciałem kodu rozbudowywać o dodatkową klasę, z której utworzyłbym tylko jeden obiekt. Ale w takim wypadku utworzyłem klasę Time i tam wpakowałem te dwie zmienne i dorzuciłem metody get oraz set według Twojego przepisu.
komentarz 29 grudnia 2018 przez mbabane Szeryf (79,260 p.)
Nie robiłem za bardzo zadań ze spoja, ale z tego co się orientuje to tam chyba rzadko kiedy  coś się wyodrębnia, nawet do funkcji. Wali się wszystko w jednym mainie.

Normalnie w Javie i tak prawdopodobnie by to JIT zoptymalizował do wywołań inline.

Podobne pytania

0 głosów
1 odpowiedź 401 wizyt
0 głosów
2 odpowiedzi 1,100 wizyt
pytanie zadane 28 stycznia 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
0 głosów
2 odpowiedzi 116 wizyt
pytanie zadane 16 listopada 2020 w C i C++ przez arccx Nowicjusz (210 p.)

93,334 zapytań

142,328 odpowiedzi

322,406 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...