我有一个名为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。
答案 0 :(得分:9)
让方法返回其所有者(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);
答案 1 :(得分:0)
这些方法可以返回SubTest
,因为Java的返回类型是协变的。
您必须覆盖这些方法,以便在this
中返回SubTest
,SubTest
,例如:
@Override
public SubTest setTest(String message) {
super.setTest(message); // same functionality
return this;
}