我有Foo.java
,它是接口(interface)。
还有很多实现它的类。 Bar1.java、Bar2.java
等
我在前端有一个方法,如下所示:getBar(String bar)
我可以这样做:
if(bar.equals("Bar1")) {
return new Bar1();
}
但是我可以以某种方式做到这一点吗,每次有新的东西实现 Foo.java
,那么我就不必使用新的 ELSE
语句来更新我的方法。
我认为每个实现都有唯一的 ID 或其他东西,每当我创建它时,我都会将其添加到 BarX.java
中。
有什么建议或想法吗?我想也许我可以使用enum
或smthing或任何其他解决方案。
最佳答案
仅供引用:您当然意识到您不应该这样写:
if(bar == "Bar1") {
return new Bar1();
}
你应该这样做:
if("Bar1".equals(bar)) {
return new Bar1();
}
看起来你需要一个工厂(又名虚拟构造函数)。如果您的所有 Foo 实现者都有一个默认构造函数,您可以这样做:
public class FooFactory {
public static Foo create(Class<Foo> clazz) {
return clazz.newInstance();
}
public static Foo create(String className) {
return create(Class.forName(className));
}
}
有异常需要处理;我没有时间为你拼写它们。你应该明白这个想法。您需要做的就是编写一个新类,您的工厂就可以处理它。
如果还有其他构造函数,只需使用参数和附加调用来详细说明主题即可。这应该可以帮助您入门。
关于java - 获取 Foo.java 的一种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728430/