java - 如何使父类(super class)方法返回子类的实例

标签 java subclass

我有一个名为 Test 的类和一个名为 SubTest 的类,它们扩展了 Text,我想在 中有一个方法>Test 类将在调用时返回 SubTest 的实例,我想这样做:

SubTest test = new SubTest().setTest("Hello!").setOtherTest("Hi!");

setTest()setOtherTest() 方法应该在 Test 类中。

但是当我这样做的时候:

public Test setTest(String test) { return this; }

它只返回 Test 的实例,所以我必须将 Test 转换为 SubTest,但我不想这样做。

这可能吗?如果是,如何?

谢谢,MinusKube。

最佳答案

让方法返回其所有者 (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;
    }
}

现在,您不需要任何转换:

Student s = new Student().setName("Jessy").setStudentId("1234");
Teacher t = new Teacher().setName("Walter").setParkingLotId(17);

另请参阅:Using Generics To Build Fluent API's In Java

关于java - 如何使父类(super class)方法返回子类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820288/

相关文章:

java - 创建 AWS lambda 以将 csv 文件从 S3 复制到 RDS MySQL

java - waitQuise 超时后不返回

java - 如何编写通过检查 IMEI 来解锁 Activity 的代码?

c++ - ComboBox 子类列表框

java - 引用 Java 中特定父类(super class)的任何子类

java - 自定义 JAXB xml 输出

Java - 从子类发送值

java - 涉及父类(super class)内子类实例的继承

python-3.x - 获取 ABCMeta 的所有注册子类

java - GlassPane 未显示在 JFrame 上