Какая разница в доступе из внутреннего класса или метода?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Какая разница в доступе из внутреннего класса или метода?

Сообщение Гость »


Привет, извините за, возможно, глупый вопрос, мне просто очень интересно. Компилятор говорит

Переменная resMessage доступна из внутреннего класса и должна быть окончательной или фактически окончательной

И подчеркивает его красным, а его родственное «имя» живет и работает нормально. Почему?

btGoOn.setOnClickListener(new View.OnClickListener() { @Override public void onClick (Просмотр) { Строка resMessage = ""; Строка электронной почты = etEmail.getText().toString().trim(); Имя строки = etName.getText().toString().trim(); Имя строки1 = etName.getText().toString().trim(); Строковый пароль = etPassword.getText().toString().trim(); if (!validateEmail() | !validateName() | !validatePassword()){ // ничего не делать (ошибки ввода обрабатываются в функциях проверки } еще { auth.createUserWithEmailAndPassword(электронная почта, пароль).addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task TaskAddUser) { если (taskAddUser.isSuccessful()) { resMessage = name + " " + getString(R.string.msg_user_signed_up); auth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task TaskVerifSent) { если (taskVerifSent.isSuccessful()) { resMessage += " " + getString(R.string.msg_user_verif_sent); } еще { resMessage += " " + getString(R.string.msg_user_verif_not_sent); } } }); Log.d(TAG, resMessage); Toast.makeText(SignupActivity.this, resMessage, Toast.LENGTH_SHORT).show(); // TODO: 12.10.2023 добавить дополнения... Намерение намерение = новое намерение (SignupActivity.this, LoginActivity.class); startActivity (намерение); } еще { resMessage = name + " " + getString(R.string.msg_user_signed_up_failed) + TaskAddUser.getException().getMessage(); Log.d(TAG, resMessage); Toast.makeText(SignupActivity.this, resMessage, Toast.LENGTH_LONG).show(); } } }); } } }); Эти переменные resMessage были всего лишь временными мешками для сбора текста, поэтому, когда я попытался создать их на уровне общего блока (btGoOn.setOnClickListener), у меня возникла эта ошибка.

Да, я сделал поиск в Интернете, и это самый близкий вопрос — я мог бы получить то же самое, если бы перешел к лямбда-выражениям (но я этого не сделал). И есть несколько советов по перемещению переменной на верхний уровень полей класса. ха, это не поле, это временный мешок!. Также я могу принять предложение Android Studio и переключиться на такой, я бы сказал, уродливый код:

final String[] resMessage = {""}; ... resMessage[0] = name + " " + getString(R.string.msg_user_signed_up); //... Log.d(TAG, resMessage[0]); Toast.makeText(SignupActivity.this, resMessage[0], Toast.LENGTH_SHORT).show(); Но почему компилятор запрещает одну переменную и разрешает другую**?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»