gpt4 book ai didi

java - 我可以像参数一样引用子类吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:09 25 4
gpt4 key购买 nike

我想在我的抽象类中引用任何潜在的子类,例如参数,以创建通用函数,例如,在不重载的情况下创建子类的新实例。

abstract class Fictional
{
public static ArrayList<SUBCLASS_PARAM> subclassArray = new ArrayList<SUBCLASS_PARAM>();
int i;

private Fictional(int i) //All subclasses have to implement this constructor
{
this.i = i;
//body
}

public static SUBCLASS_PARAM loadFromFile() //I wouldn't have to override this method
{
SUBCLASS_PARAM subclass = new SUBCLASS_PARAM(1); //it's not possible to make new instance of abstract class, but it would be possible with any other subclass
subclassList.put(subclass);
return subclass;
}
}

class Real extends Fictional
{
//nothing here
}

class main
{
Real r = Real.loadFromFile()
}

有什么办法可以制作这样的东西吗?

最佳答案

您可以使用泛型和子类来做到这一点,如下所示:

public abstract class Fictional<A extends Fictional> {
public ArrayList<A> subclassArray = new ArrayList<A>();
int i;

public Fictional(int i) {
this.i = i;
}

public A loadFromFile() //I wouldn't have to override this method
{
A subclass = this.build(1); //it's not possible to make new instance of abstract class, but it would be possible with any other subclass
subclassList.put(subclass);
return subclass;
}

protected abstract A build(int i);
}

class Real extends Fictional
{
public Real(int i) {
super(i);
}

@Override
protected Fictional build(int i) {
return new Real(i);
}
}

关于java - 我可以像参数一样引用子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084448/

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