Подтвердить что ты не робот

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

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

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

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

Спасибо.

4b9b3361

Ответ 1

Обычно вы можете использовать только 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);
    }
});

Ответ 2

Один за раз:

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

<ClassName>.this

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

открытый класс Siht {   класс NestedSiht {       void demoThis() {           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();
}

}

Ответ 7

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

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

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

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