Я занимаюсь программированием для Android и узнал о намерениях, когда увидел конструктор, который, на мой взгляд, обученный C #, показался мне забавным. Звонок был:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Оба параметра для меня новы. Как возникает статический ".this" в имени класса? Это Java или Android? Я предполагаю, что это то же самое, что просто сказать «это», поскольку я нахожусь в контексте CurrentActivity
, но я не понимаю, как «это» может быть вызвано из самого имени класса. Также. ".Class" выглядит так, как будто он используется для отражения, с которым я знаком по C #, но любое понимание этого также приветствуется.
Спасибо.
this
всегда самый внутренний класс.this
так похожа на JavaScriptthis
? Я думаю, это то, что вы получаете, если у вас нет первоклассных функций или лямбд :-)Один за раз:
Первая конструкция называется квалифицированным this . Назначение синтаксиса - в том случае, когда вы находитесь во внутреннем классе (обычно анонимном внутреннем классе) и хотите ссылаться
this
на внешний класс, а неthis
на (анонимный) внутренний класс. Фраза «квалифицировано это» может использоваться только вthis
неоднозначном контексте . Цитата JLS: «Это ошибка времени компиляции, если выражение встречается в классе или интерфейсе, который не является внутренним классом класса T или самого T».Вторая конструкция, называемая a,
class literal
является способом ссылки на объект Class, представляющий этот тип. Его можно использовать в любом контексте.источник
qualified this
не дляclass literal
. Я расширил свой ответ, чтобы прояснить это.Синтаксис «Classname.this» предназначен для внутренних классов. Если вы хотите сослаться на включающий экземпляр типа «Outerclass», сделайте это как «Outerclass.this».
NextActivity.class - это просто объект класса, описывающий класс NextActivity.
источник
NextActivity.class
в java означаетtypeof(NextActivity)
в C #источник
ClassName.this
используется для ссылки на текущий экземпляр внешнего класса из внутреннего класса.источник
используется во вложенных классах для ссылки на текущий экземпляр включающего класса, поскольку ключевое слово this относится к экземпляру вложенного класса.
источник
Это сбивает с толку только потому, что когда вы используете « MainActivity.this », кажется, что вы имеете в виду класс, а не объект. На самом деле, когда вы используете "this", вы всегда имеете в виду текущий объект, как указано в документации java se:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Это просто синтаксически своеобразно.
источник