我对编程有点新意,我被困住了。假设我在一个项目中有五个不同的类:foo1,foo2,foo3,foo4和foo5,它们都有不同但类似的东西。现在说我需要创建每个对象的新对象,如下所示: foo1 bar1 = new foo1(); foo2 bar2 = new foo2(); foo3 bar3 = new foo3(); 等等。 当然可行,但我真的想找到一种方法来节省大量的空间,如果我可以在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所有对象放在一个单个数组可以解决。如果它是完全相同的类,我可以使它工作,但如果它不同,我可以。它甚至可能吗?
答案 0 :(得分:0)
尝试阅读一些可以在Java中使用的多态性。 Interfaces和Abstract类如何工作。 Java和其他内容中的extends
和implements
关键字是什么......
我发现这些教程看起来不错:
答案 1 :(得分:0)
如果班级名称是顺序的,那么您可以使用以下内容:
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);
}
}
但由于所有对象都是异构的,因此数组必须是Object[]
答案 2 :(得分:0)
听起来像factory method pattern就是你要找的。 p>
您尝试以多态方式处理的任务与通常略有不同,因为实例化通常需要您知道要创建的对象的具体类型。工厂允许你这样做。
首先,您需要确保要实例化的类型派生自同一个接口:
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();
//...
}