Using “this” with class name

前端 未结 7 1482
暗喜
暗喜 2020-11-30 18:19

I am doing Android programming and was learning about Intents, when I saw a constructor that, to my C# trained mind, seemed funky. The call was:

Intent myI         


        
相关标签:
7条回答
  • 2020-11-30 18:21

    The syntax "Classname.this" is for inner classes. If you want to refer to the enclosing instance of type "Outerclass" then you do it as "Outerclass.this".

    NextActivity.class is simply the Class object that describes class "NextActivity".

    0 讨论(0)
  • 2020-11-30 18:25

    Usually, you can use only this. But, sometimes this makes reference to an inner class... so, for example:

    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);
        }
    });
    
    0 讨论(0)
  • 2020-11-30 18:33

    One at a time:

    The first construct is called a qualified this. The purpose of the syntax is in the case where you are in an inner class (typically an anonymous inner class) and you want to reference the this of the outer class rather than the this of the (anonymous) inner class. The "qualified this" can only be used in a context where this would be ambiguous. The quote the JLS "It is a compile-time error if the expression occurs in a class or interface which is not an inner class of class T or T itself".

    The second construct is called a class literal is the way to reference the Class object that represents that type. It can be used in any context.

    0 讨论(0)
  • 2020-11-30 18:40

    ClassName.this is used to reference the current instance of an outerclass from an inner class.

    0 讨论(0)
  • 2020-11-30 18:44

    NextActivity.class in java means typeof(NextActivity) in C#

    0 讨论(0)
  • 2020-11-30 18:44
    <ClassName>.this
    

    is used in nested classes to refer to the current instance of the enclosing class, since the `this' keyword refers to the nest class instance.

    public class Siht {
        class NestedSiht {
            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());
            }
        }

    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();
    }
    

    }

    0 讨论(0)
提交回复
热议问题