Intereting Posts
Что следует использовать вместо «setListNavigationCallbacks»? Есть ли какое-либо событие, когда Android-приложение становится видимым в приложении? Как отключить элементы в представлении списка? React Native android build не удалось. Местоположение SDK не найдено Eclipse ADT 17 вызывает утечку памяти при редактировании пользовательского интерфейса макета? Запуск модели Tensorflow на Android Android загружает изображение с сервера и сохраняет на SD-карте без использования BitmapFactory Как отправить двоичные данные с помощью socket.io? Как android downloadManager делает http basic authentication Тема AppCompat DayNight всегда выглядит как тема Light? Получить контекст активности в адаптере из фрагмента Обнаруживать, если новая версия для установки или обновления (приложение для Android) Weird NullPointerException в Spinner Перехват запроса источника видео HTML5 в Android WebView Программно свернуть или развернуть CollapsingToolbarLayout

Использование «this» с именем класса

Я занимаюсь программированием на базе Android и узнал о намерениях, когда увидел конструктора, который, к моему обученному умению C #, казался напуганным. Вызов:

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class); 

Оба параметра новы для меня. Как существует статическое «.this» от имени класса? Это вещь Java или Android? Я предполагаю, что это то же самое, что просто сказать «это», так как я в контексте CurrentActivity , но я не понимаю, как «это» можно отменить из самого имени класса. Также. «.class» выглядит так, как будто он используется для отражения, о котором я знаком на C #, но любое понимание этого также будет приветствоваться.

Благодарю.

Solutions Collecting From Web of "Использование «this» с именем класса"

Обычно вы можете использовать только this . Но иногда this ссылается на внутренний класс … так, например:

 Button button = (Button)findViewById(R.id.ticket_details_sell_ticket); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // it will be wrong to use only "this", because it would // reference the just created OnClickListener object Intent login = new Intent(ClassName.this, Login.class); startActivityForResult(login, LOGIN_REQUEST); } }); 

Один за раз:

Первая конструкция называется квалифицированной . Цель синтаксиса заключается в том, что вы находитесь во внутреннем классе (обычно это анонимный внутренний класс), и вы хотите ссылаться на this внешнего класса, а не на this (анонимный) внутренний класс. «Квалифицировать это» можно использовать только в контексте, где this было бы двусмысленно. Цитата JLS «Это ошибка времени компиляции, если выражение встречается в классе или интерфейсе, который не является внутренним классом класса T или T».

Вторая конструкция называется class literal – это способ ссылки на объект класса, который представляет этот тип. Его можно использовать в любом контексте.

Синтаксис «Classname.this» предназначен для внутренних классов. Если вы хотите обратиться к прилагаемому экземпляру типа «Outerclass», вы сделаете это как «Outerclass.this».

NextActivity.class – это просто объект класса, который описывает класс «NextActivity».

NextActivity.class в java означает typeof(NextActivity) в C #

ClassName.this используется для ссылки на текущий экземпляр внешнего класса из внутреннего класса.

 <ClassName>.this 

Используется во вложенных классах для обращения к текущему экземпляру охватывающего класса, так как ключевое слово this это относится к экземпляру класса гнезда.

 Открытый класс Siht {
     Класс NestedSiht {
         Void demoThis () {
             System.err.println (« this' is an instance of: " + this.getClass().getName()); System.err.println(" this' is an instance of: " + this.getClass().getName()); System.err.println("  this' is an instance of: " + this.getClass().getName()); System.err.println(" Siht.this" - это пример: "+
                             . Siht.this.getClass () GetName ());
         }
     } 

 void demoThis() { new java.lang.Object() { void demoThis() { System.err.println("`this' is an instance of: " + this.getClass().getName()); System.err.println("`Siht.this' is an instance of: " + Siht.this.getClass().getName()); } }.demoThis(); new NestedSiht().demoThis(); } public static void main(String [] args) { new Siht().demoThis(); } 

}