gpt4 book ai didi

java - 如何通过传递对象类型来创建多个对象?

转载 作者:行者123 更新时间:2023-12-02 11:07:18 26 4
gpt4 key购买 nike

我有一个类,我们称之为 Creator,它包含两个实例字段。这些字段属于父类 A。在 Creator 的构造函数中,我想传递类 A 的子类,然后从该传递的类型创建两个对象,并将引用分配给这两个字段。我怎样才能做这样的事情呢?我不知道如何进行这种概括。

编辑:类 Creator 应接受 A 或 A 本身的子级类型。所以不是任何其他一般类型。 AND A 没有无参构造函数

像这样,这里的 GeneralClassifier 是 A 并且没有无参构造函数:

public class TwoLevelClassifier <T> {

private GeneralClassifier firstCl, secondCl;

//The passed type shall *only* be a GeneralClassifier or a child of it
public TwoLevelClassifier( GeneralClassifier cl ) {
firstCl = //create a new classifier that is of the type passed to the constructor
secondCl = //create a new classifier that is of the type passed to the constructor
}

}

我不确定,但也许这个功能在java中被称为泛型?

最佳答案

您可以使用反射来做到这一点:

public class Creator<A> {
A a, b;

public Creator(Class<A> childrenType) throws IllegalAccessException, InstantiationException {
a = childrenType.newInstance();
b = childrenType.newInstance();
}
}

注意:这假设您使用的类具有无参数构造函数。

编辑您对原始问题进行了大幅修改。

对于类型 A 只能是 GeneralClassifier 或其子类的要求,请向类型参数添加约束:

public class Creator<A extends GeneralClassifier> {

对于类 A 没有无参数构造函数的要求:那么您必须查找要使用的构造函数并使用适当的参数调用它。您必须提前知道必须调用哪个构造函数。假设您要调用一个采用 String 的构造函数。那么它会是这样的:

Constructor<A> constr = childrenType.getConstructor(String.class);
a = constr.newInstance("Hello");
b = constr.newInstance("Bye");

查看类 java.lang.Class 的 API 文档和包java.lang.reflect

关于java - 如何通过传递对象类型来创建多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189072/

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