Vím vím, že se tady v tomto Java zdrží toho, jak to bylo v C. Takže jak tedy
v Javě napsat funkci (metodu) s výstupním parametrem?

Dovolte mi příklad:

public class ByRefPokus {
    public static void main(String[] args) {
        byte bajt = 'a';
        byte[] poleBajtu = { 'a', 'b', 'c' };

        System.out.println("b = '" + (char) bajt + "'");    // 'a'
        zmenBajt(bajt);
        System.out.println("b = '" + (char) bajt + "'");    // pořád 'a'
        System.out.println("pole_b = \"" + new String(poleBajtu) + "\"");
// a, b, c
        zmenPoleBajtu(poleBajtu);
        System.out.println("pole_b = \"" + new String(poleBajtu) + "\"");
// pořád a, b, c
    }

    static void zmenBajt(byte b) {
        b = 'b';
    }
    static void zmenPoleBajtu(byte[] b) {
        b = new byte[] { 'd', 'e', 'f' };
    }
}

Jak změnit hodnotu parametru, nikoli její referenci (to co já dělám)? Když
nemůžu udělat céčkovské *&b = 'b'*, resp. *&b = new byte[] { 'd', 'e', 'f' }
*?

Díky
Libor

Dne 4. dubna 2011 13:13 Robert Novotny <[email protected]> napsal(a):

>  Je to taka Cckoidna filozofia (,,dam ti pointer a ty mi napln jeho
> obsah"), ale principialne s tym nie je problem, kedze pole sa odovzdava
> referenciou a da sa nan pozerat ako na svojsky druh objektu.
>
> Tato metoda robi dve veci: jednak nacitava data do pola a jednak hovori,
> kolko bajtov sa nacitalo (v navratovej hodnote) a zaroven indikuje -1kou, ze
> nastal koniec prudu.
>
> Neviem ako rozumnejsie by sa obe informacie dali vratit tak, aby API nebolo
> komplikovane.
>
> RN
>
>
> On 4. 4. 2011 12:55, Libor Jelinek wrote:
>
> Dobrý den,
> dnes další "jobovka" :-) Jak je možné, že read() z potomků InputStream
> používá něco co by se v jiných jazycích nazvalo výstupní parametry nebo
> předávání parametrů referencí (ByRef např. ve VB). Java přeci nic takového
> nemá. Vše je předáváno metodám "ByVal", tedy hodnotou.
>
> Tak jak to může např.
> *      FileInputStream.read(byte[] b)*
> mít v JavaDocu napsáno
> *      @param      b   the buffer into which the data is read.*
>
> Obecně jako nováček bych čekal, že read bude vrácet byte[], nikoli, že mi
> načtené pole bajtů bude změneno v proměnné předané hodnotou (což není možné
> přece...).
> *
> *Když se podívám na zdrojáky, tak se nedostanu dále, než že to využívá JNI
> v signaturách metod, např.:
>       *private native int readBytes(byte b[], int off, int len) throws
> IOException;*
> *
> *Přiznávám, že JNI neznám a nikdy jsem nepoužíval. To je díky tomu? Nebo
> co je to za "magii"? :-)
>
> Díky
> Libor
>
>
>

Odpovedet emailem