Brak dostępu do field w metodzie spoza interfejsu

0

Chwilowo zmieniłem C# na Jave i co tu się dzieje to ja nie ogarniam XD Ale do rzeczy: mam klasę która dziedziczy po jakimś interfejsie. Interfejs składa się z jakichś metod, natomiast klasa implementuje te metody + dodatkowo posiada jeszcze jakieś pole i swoją prywatną funkcję. W skrócie:

public interface Interfejs {
    void Dupa1();
    void Dupa2();
}

public class Klasa implements Interfejs{
    int pole = 0;

    @Override
    public void Dupa1() {
        pole = 1;
    }
    @Override
    public void Dupa2() {

    }

    public void WlasnaMetoda() {
        int asd = pole;
    }
}

I teraz sedno problemu: po wywołaniu Dupa1 zmieniamy wartość pola - tu jest ok. Po czym wywołuję metodę WlasnaMetoda, w której nadal widzę że do pola przypisana jest domyślna wartość 0 - tj. nie widzi żadnych zmian.

Czy jest to spowodowane czymś, czego jeszcze w Javie nie znam? Jeżeli nie, to prawdopodobnie jest to wina biblioteki, jako że przykład jest oderwany od kontekstu.

0
  • w tytule miało być "brak dostępu do pola", rozpędziłem się i nie ten język wpisałem
0

Pokaż jak wywołujesz. Bo błąd prawdopodobnie jest między komputerem a krzesłem.

0

mam klasę która dziedziczy po jakimś interfejsie.

Która implementuje interfejs*.


Pokaż jakiś minimalny kod reprezentujący problem.

0

A na pewno robisz to wszystko na tym samym obiekcie? Pokaż kod.

0

Kurde, trochę ciężko jakoś to pełniej zaobrazować, ale spróbuję. Sprawa tyczy się biblioteki libgdx. Mam klasę InputManager implementującą InputProcessor. W ten sposób:


public class InputManager implements InputProcessor, Disposable {
    public ArrayList<Integer> pointers = new ArrayList<Integer>();

    public InputManager()
    {

    }

    public Vector2 GetLastTouchDelta()
    {
        int lastTouchIndex = GetLastTouchIndex();

        return new Vector2(Gdx.input.getDeltaX(lastTouchIndex),
                           Gdx.input.getDeltaY(lastTouchIndex));
    }

    public Vector2 GetLastTouchPosition()
    {
        int lastTouchIndex = GetLastTouchIndex();

        return new Vector2(Gdx.input.getX(lastTouchIndex),
                           Gdx.input.getY(lastTouchIndex));
    }

    public boolean IsTouched()
    {
        return Gdx.input.isTouched();
    }

    public boolean IsJustTouched()
    {
        return Gdx.input.justTouched();
    }

    int GetLastTouchIndex()
    {
        if(pointers.size() == 0)
            return -1;
        else
            return pointers.get(pointers.size() - 1);
    }

    @Override
    public void dispose() {

    }

    @Override
    public boolean keyDown(int keycode) {
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        pointers.add(pointer);
        return true;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        for(int i=0; i<pointers.size(); i++)
        {
            if(pointers.get(i) == pointer)
            {
                pointers.remove(i);
                break;
            }
        }
        return true;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }

    @Override
    public boolean scrolled(int amount) {
        return false;
    }
}

Tę klasę przekazuję do biblioteki w następujacy sposób:

InputManager inputProcessor = new InputManager();
Gdx.input.setInputProcessor(inputProcessor);

I wywyołanie:

Vector2 touchPos = inputManager.GetLastTouchPosition();

Gdy naciśnięty zostanie ekran, wywołuje się metoda touchDown, w której dodaję do listy numer "tapnięcia". Problem leży w wywołaniu metody GetLastTouchPosition, a konkretniej GetLastTouchIndex, ponieważ mimo iż do listy tapnieć została dodana pozycja, to w GetLastTouchIndex wszystko jest zainicjalizowane domyślnymi wartościami, tj. lista jest pusta. Stąd zastanawiam się czy to jakiś magiczny mechanizm tracenia danych o którym nie wiem, czy po prostu biblioteka majstruje za bardzo w instancji klasy.

0

XD Przepraszam za zamieszanie, zrobiłem żenujący błąd. Wszystko działa, nic nie trzeba tu poprawiać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1