gpt4 book ai didi

java - 如何使用泛型从父方法返回子类型以支持构建器模式

转载 作者:行者123 更新时间:2023-11-29 07:30:48 25 4
gpt4 key购买 nike

我正在尝试通过继承来支持构建器模式,以允许毫无问题地链接来自父类和子类的 setter。为此,我需要父类知道返回子类型以保持公开所有方法以进行链接。

这是我在 article 之后编写的代码示例我认为这应该有效,但正如您将看到的,第一个使用 a1 的示例工作正常,但如果我更改 setter 的顺序,则无法识别最后一个 setter 。

问题是:一旦我从父类中调用一个方法,它将自身作为一个类型返回,而不是子类型,即使 T 被定义为子类型。

public class JavaApplication1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

A a1 = new B<>().setAge(0).setId(0).setName("name"); //Works fine
A a2 = new B<>().setAge(0).setName("name").setId(0); //setId is not found

}

static class A<T extends A> {
private String mpName;

T setName(String name) {
mpName = name;
return (T) this;
}
}

static class B<T extends B> extends A<T> {
private int mpAge;
private int mpId;

T setAge(int age) {
mpAge = age;
return (T) this;
}

T setId(int id) {
mpId = id;
return (T) this;
}
}
}

最佳答案

你应该改变你的类定义如下:

static class A<T extends A<T>>
static class B<T extends B<T>> extends A<T>

java.lang.Enum 使用相同的声明。您可以在 this post 中找到为什么需要它的解释。 .

关于java - 如何使用泛型从父方法返回子类型以支持构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43104469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com