首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有人能给我解释一下关键词"this“吗?

有人能给我解释一下关键词"this“吗?
EN

Stack Overflow用户
提问于 2013-06-09 23:34:39
回答 1查看 169关注 0票数 0

我能够非常快地学习和掌握东西,但这仍然让我感到困惑:

这是在主类(DCFlags)中:

代码语言:javascript
运行
复制
private WGCustomFlagsPlugin pluginWGCustomFlags;
private WorldGuardPlugin pluginWorldGuard;
private DCPvPToggle pluginDCPvPToggle;
private RegionListener listener;

public WGCustomFlagsPlugin getWGCFP(){
    return this.pluginWGCustomFlags;
}

public WorldGuardPlugin getWGP() {
    return this.pluginWorldGuard;
}

public DCPvPToggle getPPT(){
    return this.pluginDCPvPToggle;
}

public void onEnable(){
    this.pluginWorldGuard = Utils.getWorldGuard(this);
    this.pluginWGCustomFlags = Utils.getWGCustomFlags(this);
    this.pluginDCPvPToggle = Utils.getDCPvPToggle(this);
    this.listener = new RegionListener(this);
}

这是一个不同的类(Utils):

代码语言:javascript
运行
复制
public static WGCustomFlagsPlugin getWGCustomFlags(DCFlags plugin){
    Plugin wgcf = plugin.getServer().getPluginManager().getPlugin("WGCustomFlags");
    if ((wgcf == null) || (!(wgcf instanceof WGCustomFlagsPlugin))) {
        return null;
    }
    return (WGCustomFlagsPlugin)wgcf;
}

public static WorldGuardPlugin getWorldGuard(DCFlags plugin){
    Plugin wg = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
    if ((wg == null) || (!(wg instanceof WorldGuardPlugin))) {
        return null;
    }
    return (WorldGuardPlugin)wg;
}

public static DCPvPToggle getDCPvPToggle(DCFlags plugin){
    Plugin ppt = plugin.getServer().getPluginManager().getPlugin("DCPvPToggle");
    if ((ppt == null) || (!(ppt instanceof DCPvPToggle))) {
        return null;
    }
    return (DCPvPToggle)ppt;
}

我知道这是为了能够使用其他插件的方法,但什么是“这”。它的用途以及为什么需要它?

EN

回答 1

Stack Overflow用户

发布于 2013-06-09 23:40:54

this始终是对当前对象的引用。

在这些示例中,它不是必需的。但是,请考虑以下几点:

代码语言:javascript
运行
复制
class C {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

}

在本例中,this关键字用于区分传递给setName方法的局部变量name和在类中声明的字段this.name

还要考虑以下几点:

代码语言:javascript
运行
复制
class C {

    private String name;

    public void doSomething(final String name) {
        // here, `this` is an instance of C
        new Runnable() {
            @Override
            public void run() {
                // here, `this` is an instance of Runnable

                System.out.println(name);
                    // prints the name passed to the method

                System.out.println(this.name);
                    // error: Runnable has no field name

                System.out.println(C.this.name); 
                    // prints the enclosing class's name
            }
        }.run();
    }
}

在其他一些语言中,比如Python语言,总是需要使用self. (this.的大致语义等价物)来引用字段。在Java中,情况并非如此。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17011212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档