Jak działa getter?

0

Witajcie,
zastanawiam się jak w tym kodzie getter isAnswerTrue ' wie ', który argument z obiektu Question jest true?


private Question[] mQuestionBank = new Question[] {
            new Question(R.string.question_australia, true),
            new Question(R.string.question_oceans, true),
            new Question(R.string.question_mideast, false),
            new Question(R.string.question_africa, false),
            new Question(R.string.question_americas,true),
            new Question(R.string.question_asia, true),
    };
    
    
    public class Question {
        
    private int mTextResId;
    private boolean mAnswerTrue;

    public int getTextResId() {
        return mTextResId;
    }

    public void setTextResId(int textResId) {
        mTextResId = textResId;
    }
    
    public boolean isAnswerTrue() {
        return mAnswerTrue;
    }

    public void setAnswerTrue(boolean answerTrue) {
        mAnswerTrue = answerTrue;
    }

    public Question (int textResId, boolean answerTrue){
        mTextResId = textResId;
        mAnswerTrue = answerTrue;
    }
}

.......
// dalej w kodzie jest

 boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();


0

Ale obiekt Question ma tylko jeden taki argument. Z tablicy jest wybrany tylko jeden obiekt Question po indeksie, więc masz jeden obiekt Question z jednym polem mAnswerTrue

0

Nie odpisuj w komentarzach. Możliwe, że nie rozumiesz, bo nazwy zmiennych są z d**y. W answerIsTrue wcale nie musi być true. Jeśli pod mCurrentIndex podstawisz liczbe 2 to dostaniesz obiekt:
Question (R.string.question_mideast, false). Metoda isAnswerTrue zwróci false, bo taka wartość jest pod tym polem w tym obiekcie. Tak więc answerIsTrue będzie równy false

0

Ok, to jeszcze idąc dalej..

to jak ta działa ta wartość defaultValue: false przy pobieraniu wartości z danych extra? Nie rozumiem po prostu jak to się odbywa, że prawidłowo wczytywana jest wartość true i wartość false.

 public static Intent newIntent (Context packageContext, boolean answerIsTrue) {
        Log.d(TAG, "Wywołanie metody newIntent");
        Intent intent = new Intent(packageContext, CheatActivity.class);
        intent.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);
        return intent;
    }


  mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, defaultValue: false);    //TUTAJ

 mShowAnswerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mAnswerIsTrue) {
                    mAnswerTextView.setText(R.string.true_button);
                } else {
                    mAnswerTextView.setText(R.string.false_button);
                }
            }
        });

1

Zamień Twój kod

 boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();

na

 boolean answerIsTrue0 = mQuestionBank[0].isAnswerTrue();
 boolean answerIsTrue1 = mQuestionBank[1].isAnswerTrue();
 boolean answerIsTrue2 = mQuestionBank[2].isAnswerTrue();
 boolean answerIsTrue3 = mQuestionBank[3].isAnswerTrue();
 boolean answerIsTrue4 = mQuestionBank[4].isAnswerTrue();
 boolean answerIsTrue5 = mQuestionBank[5].isAnswerTrue();

to się przekonasz.

0
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, defaultValue: false)

Kompiluje sie to w ogóle? Nie kojarze takiej konstrukcji z javy, chyba że coś nowego wprowadzili :)

0

Tak, kompiluje. Książka z 2017 roku.

0

To albo to jakaś podpowiedź IDE i wtedy: jeśli nie podasz drugiego argumentu to będzie on false, jeśli podasz to będzie taki jaki podałeś.
Jeśli to nie podpowiedź IDE tylko normalna konstrukcja językowa to pewnie to samo, ale nie wiem, bo pierwsze widze :|

0

To podpowiedź IDE. Po prostu nie wczytała sie gdy skopiowałem kod i wpisałem ją ręcznie.

0

@baant: A w jaki sposób podaje się ten drugi argument o którym wspomniałeś?

0
getBooleanExtra(EXTRA_ANSWER_IS_TRUE);         //tutaj bedzie false
getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);  //tutaj bedzie false
getBooleanExtra(EXTRA_ANSWER_IS_TRUE, true);   //tutaj bedzie true

Polecam zapoznać się z podstawami języka na początek :)

0

To wiem :) ..mam na myśli tylko to, że jeśli wartość jest true to jaki kod wstawia ją zamiast tego default false

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