gpt4 book ai didi

Java软件设计

转载 作者:搜寻专家 更新时间:2023-10-30 21:15:05 26 4
gpt4 key购买 nike

<分区>

场景:

考虑以下抽象类 MeasurementType 及其子类型 AccelerationDensity:

public abstract class MeasurementType {
protected String name;
protected String[] units;

public MeasurementType() {}

public MeasurementType(String name) {
this.name = name;
}

protected void setName(String name) {
this.name = name;
}

protected String getName() {
return name;
}

protected void setUnits(String[] values) {
this.units = values;
}
}

public class Acceleration extends MeasurementType {
private String name;

public Acceleration () {
super();
}

public Acceleration(String name) {
super();
}

}

public class Density extends MeasurementType {
private String name;

public Density() {
super();
}

public Density(String name) {
super();
}

}

问题:

子类型的需要是什么,因为在这些类中没有任何东西足以区分它们(至少在我的实现中)以赋予它们作为自己的实体存在的权利,但为了例如,假设他们有自己的数组,其中包含每种不同类型的单位,因此密度有千克、克等,加速度有 mph、kmph 等。

最后我有了这个我快速编写的运行类:

public class run {

public run() {}

public static MeasurementType testType() {
Acceleration a = new Acceleration("meters per second");
return (MeasurementType) a;
}

public static void main(String[] args) {
MeasurementType mt = testType();
System.out.println(mt.getClass().toString());
System.out.println(mt.getClass().getName());

String type = "acceleration";
String[] units = new String[8];

Object mType;
if(type.equals("acceleration")) {
mType = new Acceleration();
} else if(type.equals("density")) {
mType = new Density();
} else {
mType = new Object();
}

System.out.println(mType.getName());
}
}

这就是我遇到问题的地方。我使用字符串来确定我要实例化的类型,但问题是,默认情况下,我在条件语句的末尾实例化对象,否则编译器会提示 mType 变量不会' t 已经初始化。我无法创建 MeasurementType 对象,因为它是一个抽象类。

我想这更像是一个设计问题,但是是否有更好的方法来确定要实例化的类?请假设 String type = "acceleration" 来自下拉列表或某个用户​​界面的某个地方,我只是将其硬编码进去,因为它对于这个问题来说并不是必需的。

有人能解释一下我所看到的这个设计错误吗。

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