有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么类返回自身的实例?

我有一个抽象类

public abstract class MHandle {
    public MHandle getMHandle(){
        return this;
    }
}

我还有一门课叫House

public class House extends MHandle{
    public void methodA(){
    }
}

做这样的事情有什么意义

public void methodA(){
    MHandle mh = getMHandle();
}

共 (3) 个答案

  1. # 1 楼答案

    这两者之间绝对没有区别:

    public void methodA(){
       MHandle mh = getMHandle();
       mh.toString();
    }
    

    还有这个

    public void methodA(){
       this.toString();
    }
    

    还有这个

    public void methodA(){
       toString();
    }
    

    还有这个

    public void methodA(){
       this.getMHandle().getMHandle().getMHandle().getMHandle().
          getMHandle().getMHandle().toString();
    }
    

    这种差异在任何情况下都是正确的。在MHandle类或其具体子类(如House)的内部,以及对MHandle类具有或不具有访问权限的类。如果它所做的只是返回一个自引用,而没有做任何有用的事情,那么我根本看不到有getMHandle()的意义

  2. # 2 楼答案

    这将返回House实例,因为它扩展了MHandle

  3. # 3 楼答案

    一个方面可能是协方差:可以重写此方法以返回更具体的类型:

    public abstract class MyMoreSpecificHandle extends MHandle {
        public MyMoreSpecificHandle getMHandle(){
            return this;
        }
    }
    

    还有一个类似的应用程序称为“getThis()技巧”。它与协方差方面有关,并在这里详细解释:http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ206