在一个for循环中创建不同类的新对象
问题描述:
我对编程略微陌生,而且我被卡住了。假设我在一个项目中有五个不同的类:foo1,foo2,foo3,foo4和foo5,它们都做了不同但类似的事情。现在说我需要创建每个对象的新对象,例如: foo1 bar1 = new foo1(); foo2 bar2 = new foo2(); foo3 bar3 = new foo3(); 等。 当然有效,但如果我可以在单个for循环中实例化所有我需要的对象,或者至少放置所有想要创建的对象,我真的试图找到一种节约大量空间的方法一个单独的数组来解决。如果它是全部相同的类,我可以得到它的工作,但如果它是不同的。它甚至有可能吗?在一个for循环中创建不同类的新对象
答
尝试阅读您可以在Java中使用的多态性。接口和抽象类如何工作。什么是extends
和Java等implements
关键字...
我发现这些教程,看起来不错:
答
如果类名是按顺序,那么你就可以使用如下:
For(int i = 0; i < 10; i++) {
try {
Class<?> cls = Class.forName("foo"+i);
arr[i] = cls.newInstance();
} catch (ClassNotFoundException e) {
System.out.println("Class not found " + e);
}
}
但由于所有的对象都是异组eneous,阵列将必须是类型Object[]
答
听起来像factory method pattern是你在找什么。
您尝试多态处理的任务与平常不同,因为实例化通常要求您知道要创建的对象的具体类型。工厂将允许你这样做。
首先,你需要确保你想从同一个接口实例化派生类型:
interface Foo { }
class Foo1 implements Foo { }
class Foo2 implements Foo { }
然后,您可以定义一个工厂类型:
interface FooFactory {
Foo createFoo();
}
创建的实现FooFactory
返回不同类型Foo
:
class Foo1Factory implements FooFactory {
public Foo createFoo() {
return new Foo1();
}
}
class Foo2Factory implements FooFactory {
public Foo createFoo() {
return new Foo2();
}
}
存储这些工厂的数组:
FooFactory[] factories = {
new Foo1Factory(),
new Foo2Factory()
}
然后通过数组循环,呼吁每个工厂createFoo()
:
for(FooFactory factory : factories) {
Foo foo = factory.createFoo();
//...
}
你应该阅读有关*什么是多态*。 –