我需要能够根据newInstance(String kind)方法的输入来调用继承类的构造函数...我的代码目前看起来像这样:
public class Animal {
public String kind;
public String integument;
protected Animal(){
}
public Animal newInstance(String kind){
kind x = new kind();
return x;
}
因此,例如,如果输入的String是" owl",我希望它在我之前创建的owl类中调用构造函数并创建一个新的owl实例。猫头鹰类看起来像:
public class Owl extends Bird{
public Owl(){
this.kind = "owl";
}
public void newOwl(){
}
@Override
public String sound(){
return "'Hoot'";
}
}
现在我收到一条错误消息,"找不到类的类型"因为它正在寻找一个名为kind的类,而不是等待输入并寻找一个与字符串输入相同的类。
如何重写此代码,以便该方法中的输入将按该名称查找类并创建该类型的新对象?谢谢!
答案 0 :(得分:3)
您可能想要在Animal
完全使用另一个类中的Factory或静态方法:
public class Animal {
public static Animal getInstance(final String kind) {
if(kind== null) {
throw new IllegalArgumentException("Must provide a name");
}
switch(kind.toLowerCase()) {
case "owl": return new Owl();
case "deer": return new Deer();
default: throw new IllegalArgumentException("Can't create a " + kind);
}
}
}