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

java android this

30258 просмотра

7 ответа

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

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

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

Благодарю.

Автор: skaz Источник Размещён: 12.11.2019 09:49

Ответы (7)


134 плюса

Решение

Обычно вы можете использовать только 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);
    }
});
Автор: Cristian Размещён: 02.11.2010 06:29

59 плюса

Один за раз:

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

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

Автор: Yishai Размещён: 02.11.2010 06:32

13 плюса

Синтаксис "Classname.this" предназначен для внутренних классов. Если вы хотите сослаться на включающий экземпляр типа "Outerclass", вы делаете это как "Outerclass.this".

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

Автор: DJClayworth Размещён: 02.11.2010 06:27

11 плюса

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

Автор: codymanix Размещён: 02.11.2010 06:28

8 плюса

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

Автор: akf Размещён: 02.11.2010 06:25

4 плюса

<ClassName>.this

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

открытый класс Siht {
    класс NestedSiht {
        void demoThis () {
            System.err.println (« Siht.this» является экземпляром: «+this' is an instance of: " + 
                            this.getClass().getName());
            System.err.println("
                            . 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();
}

}

Автор: khachik Размещён: 02.11.2010 06:38

0 плюса

Это сбивает с толку только потому, что когда вы используете « MainActivity.this », кажется, что вы ссылаетесь на класс, а не на объект. В действительности, когда вы используете «this», вы всегда ссылаетесь на текущий объект, как указано в документации java se:

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

Внутри метода экземпляра или конструктора это ссылка на текущий объект - объект, метод или конструктор которого вызывается. С помощью этого вы можете ссылаться на любой член текущего объекта из метода экземпляра или конструктора.

Это просто синтаксически своеобразно.

Автор: Gaetano Размещён: 07.09.2017 08:52
Вопросы из категории :
32x32