gpt4 book ai didi

java - 传递子类进行实例化

转载 作者:行者123 更新时间:2023-11-30 08:47:05 25 4
gpt4 key购买 nike

我有一个抽象类 Tool,它由 HammerScrewdriver 等各种类派生。

工具有一个带参数的构造函数

Tool(String name, double weight, double length)

然后我想在另一个类 ToolUser 中,从传递给它的 Tool 类创建对象。

class ToolUser {
void createTool(***pass the Tool somehow here***) {
for (int i=1; i<10; i++) {
// create Tool object from passed Tool Class
// could be Hammer, Screwdriver, etc. whatever was passed
}

// ToolUser will then use the instantiated objects as
// Tool objects.. it doesn't care if they are Hammers,
// Screwdrivers or anything else.. it will just access them as
// a Tool object
}
}

我不知道如何将 Hammer 传递给 createTool(Class toolClass),原因是 java 编译器提示使用子类。

这是否可能以某种方式使用反射或 Lambda 表达式?

我还想以某种方式传递参数数据(重量和长度),以便我可以使用这些参数实例化类 - 如果可能的话。

任何人都知道如何做到这一点。我对 lambda 表达式一无所知,我尝试使用反射失败了。

最佳答案

我从问题中了解到,您需要在基于类型的方法中创建一个实例,实现此目的的一种方法是反射

 void createTool(Class<? extends Tool> clazz) { // allow Tool and its subtypes
// subtypes should have constructors matching this signature
Tool tool = clazz.getConstructor(String.class,double.class,double.class)
.newInstance("name", weight,length);
// deal with exceptions...
}

你可以这样调用它

   createTool(Hammer.class);
createTool(Screwdriver.class);

关于java - 传递子类进行实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621040/

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