如何使Superclass方法返回SubClass的实例

Min*_*ube 5 java subclass

我有一个叫做Test类的类和一个叫做SubTest扩展的类Text,我想在类中有一个方法,它TestSubTest在调用时返回实例,我想这样做:

SubTest test = new SubTest().setTest("Hello!").setOtherTest("Hi!");
Run Code Online (Sandbox Code Playgroud)

setTest()setOtherTest()方法应该是在Test类.

但当我这样做时:

public Test setTest(String test) { return this; }
Run Code Online (Sandbox Code Playgroud)

它只返回Test我必须强制Test转换的实例SubTest,但我不想这样做.

可能吗 ?如果有,怎么样?

谢谢,MinusKube.

isn*_*bad 9

让方法返回其owner(this)以便能够"链接"多个方法调用称为fluent API.您可以使用泛型来解决您的问题,尽管结果代码可能在某种程度上不太可读:

public class Person<T extends Person<T>> {
    public T setName(String name) {
        // do anything
        return (T)this;
    }
}

public class Student extends Person<Student> {
    public Student setStudentId(String id) {
        // do anything
        return this;
    }
}

public class Teacher extends Person<Teacher> {
    public Teacher setParkingLotId(int id) {
        // do anything
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,你不需要任何演员表:

Student s = new Student().setName("Jessy").setStudentId("1234");
Teacher t = new Teacher().setName("Walter").setParkingLotId(17);
Run Code Online (Sandbox Code Playgroud)

另请参阅:使用泛型在Java中构建Fluent API