Java 如何设置将在类声明中使用的输入参数?

Java 如何设置将在类声明中使用的输入参数?,java,abstract-class,Java,Abstract Class,我有一个抽象类A,它有一个名为public int-get(intx,inty)的方法 类B,C,D有一个方法,它们都是相同的,并且扩展到抽象类A 在类Car中,Car构造函数接收字符串参数type,该参数应用于决定类中必须使用B、C、D中的哪一个 显然,我使用的是基于类型的if…else条件语句 所以代码看起来像 if(type.equals("B")){ A = new B(); } else if(type.equals("C")){ A = new C(); } //a

我有一个抽象类
A
,它有一个名为
public int-get(intx,inty)
的方法

B
C
D
有一个方法,它们都是相同的,并且扩展到抽象类
A

在类
Car
中,
Car
构造函数接收字符串参数
type
,该参数应用于决定类中必须使用
B
C
D
中的哪一个

显然,我使用的是基于
类型的
if…else
条件语句

所以代码看起来像

if(type.equals("B")){
    A = new B();
} else if(type.equals("C")){
    A = new C();
}  //and so on..

有什么优雅的方法可以让我像使用字符串参数一样使用它来决定使用3个类中的哪一个吗?

您可以使用
Class.forName(string)
来获取
对象,然后使用
newInstance()实例化它

您可以使用接口/抽象类作为构造函数中的参数,而不是使用字符串

public Car(A a) { this.a = a; }
然后在其他地方:

B b = new B();
new Car(b);

这就是所谓的。

你为什么要这样做?这是课堂作业的要求吗?如果没有,也许您应该告诉我们更多关于您试图解决的总体问题,而不是您试图如何通过代码解决它的细节。也许有一种完全不同的更好的方法来解决这个问题。不,没有要求,我只是想知道是否有一种方法可以做到这一点。在创建了各种类之后,我不想在一个方法中看到太多的条件语句。这种设计闻起来很不稳定,即使你找到了一种更优雅的方法来做同样的事情。我认为你最好不要追求你想做的事情,而是解决整体设计问题。如果您仍然需要我们的帮助,那么我们需要更多关于您试图解决的问题的信息,而不是您试图如何解决它的信息。所以问题不应该是“我怎样才能构建一个更好的乱七八糟的东西”,而是“怎样才能完全避免这个乱七八糟的东西”。我通过将类作为参数传递来解决这个问题。这对我来说很优雅:)好,听起来好多了,这就是查尔斯·古德温建议的,被称为依赖注入。我要求你“接受”查尔斯·古德温的答案,因为你正在遵循他的建议。依赖注入——这就是我要说的:解决问题的答案,而不是问题。1+@气垫船你是说我有做后者的习惯吗?(事实上,我很可能是这样,我一半的时间都在学习,一半的时间都在回答。)