Java Activity.this在上下文中引用

Java Activity.this在上下文中引用,java,inner-classes,Java,Inner Classes,我有一个活动和一个列表视图,我添加了一个侦听器(setOnItemClickListener)。 当我从上述侦听器进入此方法时: public void onItemClick(AdapterView<?> parent, View view, int pos, long id ) 通过host变量,我可以访问所有MyActivity方法和属性(它们不是静态的),但我无法访问MyActivity。此引用 有人能解释一下为什么吗?谢谢MyActivity。当代码在内部类中运行

我有一个
活动
和一个
列表视图
,我添加了一个侦听器(
setOnItemClickListener
)。 当我从上述侦听器进入此方法时:

    public void onItemClick(AdapterView<?> parent, View view, int pos, long id )
通过
host
变量,我可以访问所有
MyActivity
方法和属性(它们不是静态的),但我无法访问
MyActivity。此
引用


有人能解释一下为什么吗?谢谢

MyActivity。当代码在内部类中运行时,此
将引用“外部”MyActivity类的实例。-是吗?如果是这样,为什么需要
host
变量

更新:我刚刚才意识到,您可能忽略了一个事实,即您将通过
MyActivity访问的所有内容。在内部类中,您可以通过特定设置中的
host
访问这些内容

更新:您似乎对
的含义有错误的理解。最初,它代表这个对象,即运行代码的类

通过附加符号
类,Java允许您访问代码外部类的实例,但只能从内部类访问

在下面的示例中,
类。此
工作:

class A {
    int a;
    class B {
        void process_a_in_A() {
            A.this.a++;
        }
    }
    // however, this does NOT work b/c
    // static inner classes do not have references t oouter classes
    static class C {
        void process_a_in_A() {
            // error -- class A.C is detached from its outer class A
            A.this.a++;
        }
    }
}
另外,在下面的示例中,
类。此
不起作用。原因很简单,系统无法知道是否存在类A的实例,以及您希望引用的类A的可能多个实例中的哪一个

class A {
    int a;
}

class B {
    void process_a_in_A() {
        // A here is a class name, not an object reference;
        // so A.this is meaningless in this context
        A.this.a++;
    }
}

再一次,请注意,您提出的问题没有提供必要的信息来具体回答,因此只能笼统地回答,而且您似乎对内部类和
类有错误的理解。这是
表示法。

MyActivity。这将引用当代码在内部类中运行时,“外部”MyActivity类。--是吗?如果是,为什么需要
host
变量

更新:我刚刚才意识到,您可能忽略了一个事实,即您将通过
MyActivity访问的所有内容。在内部类中,您可以通过特定设置中的
host
访问这些内容

更新:您似乎对
this
的含义有错误的理解。最初,它代表此对象,即运行代码的类

通过附加符号
类,Java允许您访问代码外部类的实例,但只能从内部类访问

在下面的示例中,
类。此
工作:

class A {
    int a;
    class B {
        void process_a_in_A() {
            A.this.a++;
        }
    }
    // however, this does NOT work b/c
    // static inner classes do not have references t oouter classes
    static class C {
        void process_a_in_A() {
            // error -- class A.C is detached from its outer class A
            A.this.a++;
        }
    }
}
另外,在下面的示例中,
Class。此
不起作用。原因很简单,系统无法知道是否存在类A的实例,以及您要引用的可能多个类A实例中的哪一个

class A {
    int a;
}

class B {
    void process_a_in_A() {
        // A here is a class name, not an object reference;
        // so A.this is meaningless in this context
        A.this.a++;
    }
}

请再次注意,您提出的问题没有提供必要的信息来具体回答,因此只能笼统地回答,而且您似乎对内部类和
类有错误的理解。这是
表示法。

确切地说,在任何类中,您都可以通过其名称来引用自身e->Name.this(特别用于内部类)


既然您已经在变量主机中引用了对象,那么为什么不直接使用它呢?

确切地说,在任何类中,您都可以通过其名称->名称来引用自身。这(尤其用于内部类)


既然您已经在变量主机中引用了您的对象,那么为什么不直接使用它呢?!

当然,在我的代码中,我是通过主机访问的。我的问题是因为我不明白为什么我不能通过
MyActivity访问
MyActivity
属性。这
。此外,当我键入eclipse“主机”时“,它向我展示了很多可能性,但这不包括在内。谢谢你说的是对的。但是你还没有理解我的问题(当然我没有解释清楚)。我有主人object@user1205781还有一个问题,为什么Eclipse不显示主机?如果这是你的问题,那么答案是:
host
host。这将是相同的。你需要它做什么?这将导致无休止的选择嵌套,因为这样,
host.this.this
也必须显示?;)--如果这不是你的问题,你能重新措辞吗?是的,你是对的。我认为这是可以从一个对象访问的(我知道这是一件愚蠢的事情,但我认为这是合法的,所以我很好奇),而这是不合法的。无论如何,谢谢你的时间!当然,在我的代码中,我是通过主机访问的。我的问题是因为我不明白为什么我不能通过
MyActivity访问
MyActivity
属性。此外,当我输入eclipse“host”时,它向我展示了很多可能性,但这并不包括在内。谢谢你说的是对的。但是你还没有理解我的问题(当然我没有解释清楚)。我有主人object@user1205781还有一个问题,为什么Eclipse不显示主机?如果这是你的问题,那么答案是:
host
host。这将是相同的。你需要它做什么?这将导致无休止的选择嵌套,因为这样,
host.this.this
也必须显示?;)--如果这不是你的问题,你能重新措辞吗?是的,你是对的。我认为这是可以从一个对象访问的(我知道这是一件愚蠢的事情,但我认为这是合法的,所以我很好奇),而这是不合法的。无论如何,谢谢你的时间!谢谢你的回答。我跟你说的和上面的Stacker一样。谢谢你的回答。我跟你说的和上面的Stacker一模一样。